zoukankan      html  css  js  c++  java
  • Applet实现对本地文件进行读写

    http://hi.baidu.com/echo_swjtu/blog/item/e0bdaa2874798520359bf736.html

    这篇文章澄清了我一直以来思想中的一个错误,就是applet要想读取本地文件必须要修改Java_Home\lib\security\java.security文件,即使经过了数字签名的jar也一样。原来这是两种获得授权的方法而已。大善,基于Javafx的应用可以搞下去了。

    ————————————————————————————————————————————————————————————————

    Applet实现对本地文件进行读写的方法有两种。
    1.修改Java_Home\lib\security\java.security文件,并把自己写好的.policy文件放到指定的目录中。(我实验没成功)
       这个方法实现起来比较简单,而且只要在.policy文件中进行一定的设置,Applet程序几乎就可以访问本地磁盘里的所有文件了。但是这种方法的一 个最大缺点就是要改客户端Jre的java.security文件。在实际应用中,这样的做法不太现实。不可能每个用户为了用你这个Applet去修改自 己的安全配置文件,况且很多用户根本不知道Jre是什么。
    2.对Applet所在的Jar包进行数字签名。
    1、 keytool -genkey -keystore someone.store -alias someone  这个命令用来产生一个密匙库,执行完毕后会在当前目录下产生一个soneone.store的文件,这里的someone是我自己写的 名字,你可以对它进行修改。另外在执行命令的时候还有提示你输入密匙库的密码,这里你一定要记住,否则后面要用的时候无法输入。
    2、给你的Applet打包成jar文件,jar -cvf ****.jar XX .
    3、给jar包签名:
      jarsigner -keystore someone.store MyApplet.jar someone

    这个命令就是用我们刚刚生成的密钥给jar文件进行签名。

    3.补充   鉴于对applet进行数字签名比较麻烦,特别是对于不懂数字签名的人来说,经过网上查阅,还有一种简单的方法来实现对本地文件的读写。

    http://support.microsoft.com/kb/180707/zh-cn

    http://www.exam8.com/computer/Java/zonghe/200708/659876.html

    不 要将这些服务器上的文件作为普通文件来处理,而是将它们作为网络资源来获取它们的内容。在Java中可用于获取网络资源的类主要有两种,一是URL类,另 一个是URLConnection类。两个类都提供了以字节流的方式读取资源信息的方法,而且可以对资源信息的类型作出判断,以便作相应的处理。不同之处 是URLConnection类可提供的信息比URL类要多得多,它除了可以获取资源数据外,还可以提供资源长度、资源发送时间、资源最新更新时间、资源 编码、资源的标题等许多信息。

    URL类:

    URL(String, String, int, String) 构造方法,创建一个包含协议类型、主机名、 端口号和路径的URL对象

    URL(String, String, String)构造方法,创建一个包含协议类型、主机名和路径 的URL对象,其中端口号为缺省值·

    URL(String)构造方法,创建一个URL对象,参数将协议、主机名、端口号和路径组合起来 ·

    URL(URL,String)构造方法,根据给定URL对象与相对路径创建一个新的URL对象·

    Object getContent( ) 检索URL内容信息,并返回给对象 ·

    InputStream openStream( ) 从资源处返回一个输入流 ·

    URLConnection openConnection( )生成一个URLConnection对象

    URLConnection类:

     protected URLConnection(URL) 构造方法,创建一个针对指定URL对象的URLConnection类 ·

    Object getContent( ) 返回URL对象所对应的内容 ·

    InputStream getInputStream( ) 获取从对象中读取的字节流 ·

    Protected static String guessContentTypeFromStream(InputStream is) 根据输入流猜测内容的类型


    ---- 下面以读取服务器上的.txt文件内容为例说明如何在Applet中读取文件。设服务器的IP地址为202.114.1.16,.txt文件的路径为/file/sample.txt。以下是读取sample.txt内容的Applet的源代码。

    //getfile.html
    <HTML>
    <HEAD>
    <TITLE>读取文件的Applet</TITLE>
    </HEAD>
    <BODY>
    这是服务器上TXT文件的内容<BR>
    <Applet code="getFile.class" width=200 height=100>
    </Applet>
    </BODY>
    </HTML>

    //getFile.Java


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

    public class getFile extends Applet {
    String info;

    public void init() {
    URL url;
    URLConnection urlc;

    resize(200, 100);
    setBackground(Color.white);

    try {
    url = new URL("http://202.114.1.16/file/sample.txt");
    urlc = url.openConnection();
    urlc.connect();
    info = getInfo(urlc);
    } catch (MalformedURLException mfe) {
    System.out.println("URL form error!");
    } catch (IOException ioe) {
    System.out.println("IO Exception!");
    }
    }

    public void paint(Graphics g) {
    g.setColor(Color.red);
    g.drawString(info, 50, 50);
    }

    public String getInfo(URLConnection urlc) {
    String txt = new String();
    InputStream is;
    int i;

    try {
    is = urlc.getInputStream();
    i = is.read();
    while (i != -1) {
    txt = txt + (char) i;
    i = is.read();
    }
    is.close();
    } catch (IOException ioe) {
    System.out.println("IO Exception!");
    txt = new String("File read failed!");
    }

    return txt;
    }
    }


    ——————————————————————————————————
    傲轩游戏网
  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2566311.html
Copyright © 2011-2022 走看看