Java项目找不到文件

时间:2012-07-27 17:07:12

标签: java file io

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

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 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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")));

答案 2 :(得分:0)

您尚未指明文件的位置。

getClass().getResource用于在类路径中查找资源/文件;例如,资源可以打包在你的jar中。在这种情况下,您无法将其作为File打开;见拉斐尔的回应。

如果要在文件系统上找到资源/文件,请直接创建File对象,而不是getResource()

  

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

答案 3 :(得分: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);
}