日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

applet操作本地文件

發布時間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 applet操作本地文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????? 最近開發,遇到一問題,需要用applet來操作本地文件,在網上查了很多資料,研究了三天終于搞定了。做個總結,以便遇

到相同問題的朋友可以做個參考。

????? 正常來說applet是不能操作本地文件的,這是書上說的,其實這也就是java的安全策略,? Java應用程序環境的安全策略,詳

細說明了對于不同的代碼所擁有的不同資源的許可,它由一個Policy對象來表達,Policy是什么?呵呵,一會再說,先別急。那么

applet的安全策略就包括不能對本地文件的讀和寫。但我們可以自已來改變java的安全策略,這里也就是來改變applet的安全策略,

那么我們用什么來改變java的安全策略呢,這就需要對jre的中配置文件來進行修改,這個文件就是 jre目錄下的

lib/security/java.security,?? 我們可以自已來創建一個安全策略文件,也是就一個擴展名為.policy的文件,在里面我們可以來

寫我們自已定義的安全策略,在java.security中,來引用這個文件就行了。policy文件具體怎么來寫?java.security中怎么來引用

?下面我會有具體的描述。

????? 以上說了這個多,不得不提的一個東西就是java的數字簽名,在網上找了下數字簽名的概念。

????? 數字簽名:采用加密技術來實現對簽名者身份的認證和數據的完整性。簡單的說就是你簽字的文件別人知道是你簽的,并且知

道這個文件是否被修改過。

???? 我們可以通過 數字簽名 applet的jar文檔來實現控制的策略。

?

???? 好了,以上都是理論,我們來實際的說下步驟,做個例子。

?

1 我們先下寫個applet,功能是讀本地的一個文件。

?

package jcomponent;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;

public class FileReaderApplet extends Applet {
?boolean isStandalone = false;
?TextField fileNameField;
?TextArea fileArea;

?//? Get a parameter value
?public String getParameter(String key, String def) {
? return isStandalone ? System.getProperty(key, def)
??? : (getParameter(key) != null ? getParameter(key) : def);
?}

?//? Construct the applet
?public FileReaderApplet() {
?}

?//? Initialize the applet
?public void init() {
? try {
?? jbInit();
? } catch (Exception e) {
?? e.printStackTrace();
? }
?}

?// Component initialization
?private void jbInit() throws Exception {
? this.setSize(new Dimension(400, 300));
? this.setLayout(new BorderLayout());
? Panel panel = new Panel();
? Label label = new Label("File Name");
? panel.add(label);
? fileNameField = new TextField(25);
? panel.add(fileNameField);
? Button b = new Button("Open File");
? b.addActionListener(new ActionListener() {
?? public void actionPerformed(ActionEvent e) {
??? loadFile(fileNameField.getText());
?? }
? });
? panel.add(b);
? this.add(panel, BorderLayout.NORTH);
? fileArea = new TextArea();
? this.add(fileArea, BorderLayout.CENTER);
?}

?public void loadFile(String fileName) {
? try {
?? BufferedReader reader = new BufferedReader(new FileReader(fileName));
?? String context = new String();
?? while ((context = reader.readLine()) != null) {
??? fileArea.append(context + "/n");
?? }
?? reader.close();
? } catch (IOException ie) {
?? fileArea.append(ie.getMessage());
? } catch (SecurityException se) {
?? fileArea
???? .append("because of security constraint ,it can not do that!");
? }
?}

?//? Get Applet information
?public String getAppletInfo() {
? return "This is an applet can read and write the local file system";
?}
}

?

2? 打包jar 文件

jar? -cvf? MyApplet.jar? jcomponent.FileReaderApplet

?

3 在test.html頁面中加入applet

?? <APPLET
CODEBASE = "."
CODE = "jcomponent.FileReaderApplet.class"
ARCHIVE ="MyClass.jar"
NAME = "TestApplet"
WIDTH = 400
HEIGHT = 300
HSPACE = 0
VSPACE = 0
ALIGN = middle

</APPLET>

?這里最好將<applet>標簽轉成<object>標簽,用<object>的好處是,如果客戶的機器中沒有jre,那么applet是運行不了的,用的

<object>標簽后,可以自動下載jre安裝到客戶端,我感覺這個功能非常好。

?

?可通過HtmlConverter來轉。

?HtmlConverter工具位于${java_home}/bin下

?

?在doc下進入html頁面的相應目錄, 輸入

?? HtmlConverter test.html;

?這樣就完成的轉換

?轉換后的頁面變為

? <!--"CONVERTED_APPLET"-->

<!-- HTML CONVERTER -->
<object
??? classid = "clsid:CAFEEFAC-0015-0000-0000-ABCDEFFEDCBA"
??? codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"
??? WIDTH = 400 HEIGHT = 300 NAME = "TestApplet" ALIGN = middle VSPACE = 0 HSPACE = 0 >
??? <PARAM NAME = CODE VALUE = "jcomponent.FileReaderApplet.class" >

??? <PARAM NAME = CODEBASE VALUE = "." >

??? <PARAM NAME = ARCHIVE VALUE = "MyApplet.jar" >

??? <PARAM NAME = NAME VALUE = "TestApplet" >
??? <param name = "type" value = "application/x-java-applet;jpi-version=1.5">
??? <param name = "scriptable" value = "false">

??? <comment>
?<embed
??????????? type = "application/x-java-applet;jpi-version=1.5" /
??????????? CODE = "jcomponent.FileReaderApplet.class" /
??????????? JAVA_CODEBASE = "." /
??????????? ARCHIVE = "MyApplet.jar" /
??????????? NAME = "TestApplet" /
??????????? WIDTH = 400 /
??????????? HEIGHT = 300 /
??????????? ALIGN = middle /
??????????? VSPACE = 0 /
??????????? HSPACE = 0
???? scriptable = false
???? pluginspage = "http://java.sun.com/products/plugin/index.html#download">
???? <noembed>
???????????
??????????? </noembed>
?</embed>
??? </comment>
</object>

<!--
<APPLET CODE = "jcomponent.FileReaderApplet.class" JAVA_CODEBASE = "." ARCHIVE = "MyApplet.jar" WIDTH = 400 HEIGHT =

300 NAME = "TestApplet" ALIGN = middle VSPACE = 0 HSPACE = 0>

</APPLET>
-->
<!--"END_CONVERTED_APPLET"-->

?

完成這個步驟后,這個Applet已經可以顯示了。但是還不能讀寫本地的文件系統

?

4 使用keytool工具生成密匙庫

keytool工具位于${java_home}/bin目錄下

在DOS窗口中執行命令:keytool -genkey -keystore mytest.store -alias fhx

注意:mytest.store 是你的密匙庫的名稱,可以隨意修改,后綴請不要修改!
??????????? fhx為別名,這個也可以改成自己的名稱

執行上述命令后,DOS窗口中會提示你輸入keystore的密碼、你的姓名、組織單位等等信息。這里要注意的是輸入密碼請記住,后面

要用到的。在最后,我們輸入y確認信息。然后再直接回車設置fhx的主密碼和store密碼一致即可!

?

5 使用keytool工具導出簽名時用到的證書
在DOS窗口中執行命令:keytool -export -keystore mytest.store -alias fhx -file fhx.cert

注意:mytest.store 就是第4步生成的密匙庫名稱
??????????? fhx 也是在第4步中我們指定的別名
??????????? fhx.cert 為我們生成的證書的名稱,可以自己修改名稱,注意后綴不要改

?

命令執行成功,我們會在當前目錄下找到一個fhx.cert文件,這個就是我們剛才生成的證書。


6 使用jarsigner工具簽名jar壓縮文檔
jarsigner工具位于${java_home}/bin目錄下;
在當前DOS窗口中執行命令:jarsigner -keystore mytest.store MyApplet.jar fhx
注意:mytest.store 就是我們在第4步中生成的密匙庫名稱
??????????? MyApplet.jar 就是我們這第2步壓縮的jar文檔
??????????? fhx 是提供者的名稱,我們這里設置為我們的別名

?

7 創建訪問策略文件mytest.policy文件
在當前目錄下創建一個mytest.policy文件,其內容如下

?

keystore "file:c: /test/mytest.store", "JKS";
grant signedBy "fhx"
{ permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
};


這個文件的意思就是說讓所有由fhx簽名的applet都可以對本地的所有文件進行讀,寫,刪除的操作

?

修改${java.home}/jre/lib/security目錄下的java.security,找到下面這兩行:

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

在下面添寫第三行

policy.url.3=file:c:/test/mytest.policy

完成這個修改后我們在前面創建的applet.policy文件才有效。

?

如果你要考慮在Internet上實現這個Applet,那么你也不需要在所有的客戶端均做上面的步驟,你只需要在你的服務器上創建一個目

錄,例如c:/test,將這個目錄映射為www.testApplet.com/admin。這里的www.testApplet.com是一個假定的網址,將mytest.cert、

mytest.store、test.html、MyApplet.jar以及mytest.policy放在這個目錄中,然后修改test.policy文件如下

?

keystore "http:// www.testApplet.com/test/mytest.store", "JKS";
grant signedBy "fhx"
{ permission java.io.FilePermission "<<ALL FILES>>", "read";
};

而每個客戶端僅僅需要修改一下它們的${java.home}/jre/lib/security目錄下的java.security文件如下:

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
policy.url.3= http:// www.testApplet.com/admin/mytest.policy

?

?

好了,現在你可以運行一下test.html看看效果了,在文本框中輸入你的本地文件位置,然后點擊 open File按鈕,在下面的文件框

中就會讀出你的文件內容。

?

下面還有段程序是讀一個文件內容到另一個文件中,讀寫的功能都有了,你可以試下

import java.awt.*;
import java.io.*;
import java.applet.*;

public class AppletFileInputStream extends Applet {
?byte buffer[] = new byte[5200];
?int m_bytes;
?TextArea hArea = new TextArea("", 20, 80);

?public void init() {
? this.add(hArea);
?}

?public void paint(Graphics g) {
? try {
?? FileInputStream file1 = new FileInputStream( "d:/AppletFileInputStream.java");
?? m_bytes = file1.read(buffer, 0, 5200);
?? String hstr = new String(buffer, 0, 0, m_bytes);

?? hArea.appendText(hstr);
?? file1.close();
? } catch (Exception e) {
?? hArea.appendText("read?? err" + "/n");
? }
? try {
?? FileOutputStream file2 = new FileOutputStream("d:/temp.txt");
?? file2.write(buffer);
?? file2.close();
? } catch (Exception e) {
?? hArea.appendText("write?? err" + "/n");
? }
?}
}

?

?

//

?

還有一個最簡單的辦法,修改jre的安全策略文件java.policy, 它在Java/jre1.5.0/lib/security這個目錄下面,打開java.policy文件后增加下面兩句就行了

permission java.io.FilePermission "<<ALL FILES>>", "read, write, delete, execute";
permission java.security.AllPermission;

?

總結

以上是生活随笔為你收集整理的applet操作本地文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。