1

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

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

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

一切都在 Eclipse 中完美运行,但是当我将小程序放在我的网站上时,以我所有其他小程序的工作方式包裹在 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();
    }
4

1 回答 1

2

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

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

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

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

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

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

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

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

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

InputStream is = getClass().getResourceAsStream("res/dictionary.txt");
于 2013-09-28T22:17:50.237 回答