NetBeans 和 Eclipse FileNotFoundException
NetBeans and Eclipse FileNotFoundException
我是 NetBeans 新手,遇到两个 IDE 都找不到我的文件的问题。
如果我在 PowerShell 中编译和 运行 我的程序,它 运行 是完美的。
ExceptionError 像这样 "java.io.FileNotFoundException: model\field\levels\map01.field"。
我的包裹是。
- 控制器
- model.field.levels
- view.tiles
在Field.java中:
public void setField() {
FieldReader fr = new FieldReader();
field = fr.load("model/field/levels/map01.field");
}
在FieldReader.java中:
public int[][] load(String path){
int field[][] = null;
try {
File file = new File(path);
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
int line = 0;
int x = 0;
int y = 0;
while((s = br.readLine()) != null) {
if(line == 0) {
int start = 0;
int split = 0;
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 32) start = i + 1;
if(s.charAt(i) == 'x') split = i;
}
x = Integer.parseInt(s.substring(start, split));
y = Integer.parseInt(s.substring(split + 1));
System.out.println(x);
System.out.println(y);
field = new int[x][y];
}
if(line >= 2) {
for (int i = 0; i < x; i++) {
field[i][line - 2] = Character.getNumericValue(s.charAt(i));
}
System.out.println(s);
}
line++;
}
br.close();
} catch ( IOException e ) {
e.printStackTrace();
}
return field;
}
文件已就位,通过加载图像等其他文件一切正常。
问题已解决。
在 NetBeans 中,可以在 运行 下右键单击 Prokekt > Properties > 运行 > Working Direktory 来设置工作目录。获得绝对路径让我找到解决方案,所以感谢 Thorbjorn 的提示。 :D
您依赖于相对路径,这需要将当前工作目录设置为有用的内容。 Java 不会自动执行此操作,因此您(或您的 IDE)需要在启动程序时执行此操作。一个非常有用的工具是
File f = ....
System.out.println(f.getAbsolutePath());
告诉你实际上正在寻找什么。当你变得更高级时,你可以询问 JVM 它在哪里找到你的 class,然后推断出你需要的文件的位置。
但是请注意,打包 java 程序时,所有内容都打包在一个 jar 文件中。那么你目前的做法是行不通的。您应该查看可以在 class 路径上轻松找到的资源,无论您是在生产中的 IDE 还是 运行 中(但其他人无法轻易看到这些文件程式)。这是新程序员 运行 遇到的一个非常普遍的问题,所以您最好现在就开始,而不是稍后重新编写您的程序。
我是 NetBeans 新手,遇到两个 IDE 都找不到我的文件的问题。 如果我在 PowerShell 中编译和 运行 我的程序,它 运行 是完美的。 ExceptionError 像这样 "java.io.FileNotFoundException: model\field\levels\map01.field"。 我的包裹是。
- 控制器
- model.field.levels
- view.tiles
在Field.java中:
public void setField() {
FieldReader fr = new FieldReader();
field = fr.load("model/field/levels/map01.field");
}
在FieldReader.java中:
public int[][] load(String path){
int field[][] = null;
try {
File file = new File(path);
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
int line = 0;
int x = 0;
int y = 0;
while((s = br.readLine()) != null) {
if(line == 0) {
int start = 0;
int split = 0;
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == 32) start = i + 1;
if(s.charAt(i) == 'x') split = i;
}
x = Integer.parseInt(s.substring(start, split));
y = Integer.parseInt(s.substring(split + 1));
System.out.println(x);
System.out.println(y);
field = new int[x][y];
}
if(line >= 2) {
for (int i = 0; i < x; i++) {
field[i][line - 2] = Character.getNumericValue(s.charAt(i));
}
System.out.println(s);
}
line++;
}
br.close();
} catch ( IOException e ) {
e.printStackTrace();
}
return field;
}
文件已就位,通过加载图像等其他文件一切正常。
问题已解决。 在 NetBeans 中,可以在 运行 下右键单击 Prokekt > Properties > 运行 > Working Direktory 来设置工作目录。获得绝对路径让我找到解决方案,所以感谢 Thorbjorn 的提示。 :D
您依赖于相对路径,这需要将当前工作目录设置为有用的内容。 Java 不会自动执行此操作,因此您(或您的 IDE)需要在启动程序时执行此操作。一个非常有用的工具是
File f = ....
System.out.println(f.getAbsolutePath());
告诉你实际上正在寻找什么。当你变得更高级时,你可以询问 JVM 它在哪里找到你的 class,然后推断出你需要的文件的位置。
但是请注意,打包 java 程序时,所有内容都打包在一个 jar 文件中。那么你目前的做法是行不通的。您应该查看可以在 class 路径上轻松找到的资源,无论您是在生产中的 IDE 还是 运行 中(但其他人无法轻易看到这些文件程式)。这是新程序员 运行 遇到的一个非常普遍的问题,所以您最好现在就开始,而不是稍后重新编写您的程序。