0

我有一个项目,它找到一个文本文件并将其变成一个字符数组。但是,由于某种原因,它没有找到该文件。这是涉及打开/读取文件的所有代码:

public void initialize(){
    try{
    File file = new File(getClass().getResource("/worlds/world1.txt").toString());
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(
                new FileInputStream(file),
                Charset.forName("UTF-8")));
    int c;
    for(int i = 0; (c = reader.read()) != -1; i ++) {
      for(int x = 0; x < 20; x++){
          worlds[1][x][i] = (char) c;
          c = reader.read();
      }
    }
    }catch(IOException e){
        e.printStackTrace();
    }

}

运行时,它在控制台中显示它指向正确的文件,但声称那里不存在任何文件。我已经检查过了,该文件完好无损并且存在。这里可能出了什么问题?

4

4 回答 4

3

你不应该得到这样的资源。您可以使用

BufferedReader reader = new BufferedReader(new InputStreamReader(
    getClass().getResourceAsStream("/worlds/world1.txt")
));

另外,如果在 IDE 中开发应用程序,在打包应用程序时要小心,否则会遇到常见CLASSPATH问题

于 2012-07-27T17:13:14.867 回答
0

嵌入资源的文件路径是从包根文件夹计算的。假设该src文件夹是根包文件夹,请确保该world1.txt文件位于src/worlds/文件夹中且完整路径为src/worlds/world1.txt

第二点,使用以下代码获取嵌入式文件阅读器对象:

// we do not need this line anymore
// File file = new File(getClass().getResource("/worlds/world1.txt").toString());

// use this approach
BufferedReader reader = new BufferedReader(
        new InputStreamReader(
            getClass().getResourceAsStream("/worlds/world1.txt"),
            Charset.forName("UTF-8")));
于 2012-07-27T17:17:21.207 回答
0

您尚未指明文件所在的位置。

getClass().getResource用于在类路径中定位资源/文件;例如,资源可能被打包在您的 jar 中。在这种情况下,您不能将其打开为File; 见拉斐尔的回应。

如果要在文件系统上定位资源/文件,则直接创建 File 对象,无需getResource()

新文件(“/worlds/world1.txt”)

于 2012-07-27T17:20:25.667 回答
0

我正在使用 Netbeans,我得到了类似的结果。当我从 C 驱动器定义文件路径并运行我的代码时,它指出:访问已被拒绝。

以下代码运行良好,只需将您的文件位置回溯到源(src)文件。

//EXAMPLE FILE PATH
String filePath = "src\\solitaire\\key.data";

try {
    BufferedReader lineReader = new BufferedReader(new FileReader(filePath));

    String lineText = null;

    while ((lineText = lineReader.readLine()) != null) {
        hand.add(lineText);

        System.out.println(lineText); // Test print of the lines
    }

    lineReader.close(); // Closes the bufferReader

    System.out.print(hand); // Test print of the Array list
} catch(IOException ex) {
    System.out.println(ex);
}    
于 2014-11-09T06:07:01.833 回答