无法从服务器上的Java applet读取相关文本文件

时间:2013-09-28 22:14:43

标签: java file applet

我以小程序的形式在java中制作了游戏。它包含两个文本文件:

dictionary.txt - 包含游戏中所有被接受的单词(类似于boggle)

highScores.txt - 包含在线玩游戏的任何人的高分

在eclipse中一切都运行得很好,但是当我把applet放在我的网站上时,用我所有其他applet工作的方式包装html,它给了我一个AccessControlException并说我无法访问字典文本文件。我厌倦了研究这个问题。几乎所有的东西都说要签署我的小程序,但我不想支付数百美元而且我很确定有更好的方法。有些地方提到policytool来制作一个政策文件,但是他们解释它的方式实在令人困惑。我已经尝试将文本文件放在jar中,然后放在同一个文件夹中。有人请帮我解决这个问题。

以下是我加载文件的方式:

    try{
        BufferedReader b = new BufferedReader(new FileReader("res/dictionary.txt"));
        boolean endLoop = false;
        while(!endLoop){
            String s = b.readLine();
            if(s != null){ dictionary.add(s); }
            else{ endLoop = true; }
        }
        b.close();
    }catch(IOException e){
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:2)

当applet在Web浏览器中运行时,这两个文件仍在Web服务器上。所以你不能通过文件系统访问它们 - 即使你有权这样做,因为它们根本就不存在!

BufferedReader b = new BufferedReader(new FileReader("res/dictionary.txt"));

尝试访问本地(即运行浏览器的用户计算机上)文件“/ res / dictionary.txt”

此问题有两种可能的解决方案

  1. 将文件放在网络服务器的某个位置,然后打开URLConnection进行阅读。这始终是允许的(applet可以连接到它来自的服务器)。

  2. 将文件放入.jar文件并使用小程序ClassLoader访问它们。

  3. 解决方案2的示例(如果路径相对于jar的根目录):

    InputStream is = getClass().getClassLoader()
        .getResourceAsStream("res/dictionary.txt");
    

    或(如果path是相对于类文件的目录):

    InputStream is = getClass().getResourceAsStream("res/dictionary.txt");