我正在开发一个类似于Break Out的基本游戏,我计划使用一个文本文件来存储关于在屏幕上渲染关卡时各种对象应该位于何处的关卡数据。这是代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class LevelData {
public LevelData(){
readFile();
}
public void readFile(){
try{
BufferedReader in = new BufferedReader(new FileReader("Levels"));
String str;
while((str = in.readLine()) != null){
process(str);
in.close();
}
}catch (IOException e){
System.out.println("File Does Not Exist");
}
}
private void process(String str){
System.out.println(str);
}
}
以下代码基于之前的研究,应该访问文件" Levels"它位于与Java类相同的包中,但如果程序无法访问该文件,则应该打印"文件不存在"到控制台。我创建了一个名为" Levels"它与Java类位于同一个包中,但每当我运行此类时,它都无法正确读取文件并捕获异常。
有没有人知道为什么它无法访问正确的文件?我已经看过各种其他线程,到目前为止找不到任何可以帮助我的东西。
提前致谢
答案 0 :(得分:1)
您的Levels文件可能不希望与该类位于同一个包中,而是位于运行Java程序的同一目录中。
如果你正在使用eclipse,这可能是项目目录。
答案 1 :(得分:0)
您的问题可能是缺少文件扩展名!
BufferedReader in = new BufferedReader(new FileReader("Levels.txt"));
答案 2 :(得分:0)
new FileReader("src/<package>/Levels")
。in.close();
应该在while循环之外。答案 3 :(得分:0)
正如您所说您计划使用文本文件来存储关卡数据。解决该问题的一种方法是在存储时提供文件的相对路径,并且在读取文件时使用相对路径来读取文件。请不要忘记指定文件的扩展名。
答案 4 :(得分:0)
我看到一些问题,第一个问题是没有文件扩展名。其次,in.close()在while循环中,由于你打算存储高分,我建议你使用ArrayList。
答案 5 :(得分:0)
如果文件在jar文件的外部,则指定文件的绝对路径名始终是一个好习惯。如果它是jar文件的一部分,那么你需要使用'getResourceAsStream()'来获取它。