我有一个项目可以找到一个文本文件并将其变成一个字符数组。但是,由于某种原因,它找不到文件。这是涉及打开/读取文件的所有代码:
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 :(得分: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);
}