无法从服务器上的 java 小程序读取相对文本文件



我用java做了一个小程序形式的游戏。它包含两个文本文件:

字典.txt - 包含游戏中所有接受的单词(类似于Boggle)

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

一切都在 eclipse 中运行良好,但是当我把小程序放在我的网站上,像所有其他小程序一样包装在 html 中时,它给了我一个 AccessControlException,并说我无法访问字典文本文件。我厌倦了研究这个。几乎所有东西都说要签我的小程序,但我不想支付数百美元,我很确定有更好的方法。有些地方提到了策略工具来制作策略文件,但他们如何解释它真的很混乱。我尝试将文本文件放在罐子内,在外面放在同一个文件夹中。有人请帮我弄清楚这一点。

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

    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();
    }

当小程序在 Web 浏览器中运行时,这两个文件仍在 Web 服务器上。因此,您无法通过文件系统访问它们 - 即使您有权这样做,因为它们根本不存在!

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

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

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

  1. 将文件放在Web服务器上的某个位置,然后打开URLConnection来读取它们。这始终是允许的(小程序可以连接到它源自的服务器)。

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

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

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

或(如果路径相对于类文件的目录):

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

最新更新