2012-07-27 92 views
0

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

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

} 

运行时,它显示的是它指向正确的文件控制台,但声称没有存在那里。我已经检查过,并且该文件完整无缺。这里可能会出现什么问题?

+0

您应该使用'toURI()'而不是'toString()'。但是为了更好的回答请看@Raffaele post – Xeon 2012-07-27 17:15:18

回答

3

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

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

此外,当您打包应用程序,如果你开发它的IDE中要小心,否则你会为嵌入式资源从包装计算碰上共同CLASSPATH烦恼

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"))); 
0

你还没有指定文件的位置。

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

如果您要查找的文件系统上的资源/文件,然后直接创建文件对象,而getResource()

新的文件( “/世界/ world1.txt”)

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); 
}  
+0

虽然你可以使用'try'-with-resources块,因为你使用了'BufferedReader':try(BufferedReader lineReader = new BufferedReader(new FileReader(filePath))){ '。顺便说一下,欢迎来到[so]!不要忘记参加[旅游] :) – Unihedron 2014-11-09 06:25:44