在服务器上读取文件

时间:2012-06-17 01:54:45

标签: java applet file-permissions

我有一个applet,其部分设计用于(仅)读取文本文件并根据它创建内容。在我的applet中,这就是我读取文件的“读取”方法:

public void read (String file1) throws IOException
{
    str.removeAllElements (); // str is a global vector
    BufferedReader dia = new BufferedReader (new FileReader (file1));

    for (;;)
    {
        strc = dia.readLine ();
        if (strc == null)
            break;
        str.add (strc);
    }
}

当我通过JVM运行它时工作正常,但是当我将它连接到网上时,我想要访问的文件即使它们托管在同一服务器和文件夹上也无法访问。

我的applet的HTML如下所示:

<applet
codebase = "[the url that hosts my class and text files]"
code = "[my class file].class"
width = ###
height = ###>
</applet>

我得到的具体错误是:

AccessControlException
access denied ("java.io.FilePermission" "dial1.txt" "read")

所以,如果有人能提供帮助,那就太棒了!

2 个答案:

答案 0 :(得分:1)

我怀疑这里的真正问题是使用java.io.File。暂时将服务器/客户端放在一边,沙盒小程序根本无法建立File。但要稍微扩展一下,受信任的applet可以建立File - 但只能指向 客户端计算机的本地驱动器上的文件。 A { {1}} 永远不会指向服务器,他们只是不这样做。

这导致了。 applet访问资源的正确方法是File。 Java使用URL很多,甚至用于访问Jars中的类。

沙盒小程序可以建立一个指向它所部署的服务器的URL。

关于如何形成该URL。 URL可以相对于code base(Jars /类的位置)或document base(HTML的位置)形成。

答案 1 :(得分:0)

Applet在Web浏览器中运行。因此,在下载applet的用户的计算机上。因此,即使您要查找的文件存在于用户的计算机上,您也无法阅读它们,因为您没有文件系统访问上网的人。在服务器端读取本地文件。所以在你的情况下,你可能需要一个servlet而不是一个applet。