在Eclipse中,我的目录结构如下:
-src
-com.xxx.yyy
- MyClass.java
-assets
- car.txt
MyClass.java看起来像这样:
public class MyClass {
private static String FILE_PATH = "../assets/car.txt";
public static void main(String[] args) {
try {
//FileNotFoundException
FileInputStream fis = new FileInputStream(new File(FILE_PATH));
}
...
}
}
我默认情况下,类路径为src/
,因此我指向../assets/car.txt
的 car.txt 文件。但我明白了:
java.io.FileNotFoundException: ../assets/car.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
为什么?
答案 0 :(得分:3)
相对于执行的相对文件路径,假设程序在与src
和assets
目录相同的位置执行,则路径应为assets/car.txt
您可以使用System.out.println(new File(".").getCanonicalPath());
答案 1 :(得分:1)
据我所知,在运行程序时,它会被编译到src
文件夹的父文件夹中。您最好将assets
文件夹添加到构建路径,然后使用getClass().getResource[AsStream]()
访问该文件。
要添加文件夹,请执行以下操作:
Right click on your project
Click Build Path
Choose Configure Build Path
Select Source
Click Add Folder...
Select your assets folder
在您的代码中,您可以使用MyClass.class.getResource[AsStream]()
或getClass().getResource[AsStream]()
来调用它。
getResource()
会返回URL
和getResourceAsStream()
InputStream
。两种方法都期望路径作为参数。有关详细信息,请查看docs。
答案 2 :(得分:0)
您的路径不正确
由于您在com.xxx.yyy
内,因此您位于三个文件夹中。你需要摆脱所有这些。
所以你可以使用相对路径
FILE_PATH = "../../../assets/car.txt";
由于src是source folder
,所有内容都直接来自classpasth,你也可以使用
FILE_PATH = "assets/car.txt";
答案 3 :(得分:0)
你在目录结构中处于第二级。
尝试
FILE_PATH = "../../assets/car.txt";
答案 4 :(得分:0)
希望,这会对你有帮助......
package com.xxx.yyy;
import java.io.File;
import java.io.FileInputStream;
public class MyClass {
private static String FILE_PATH = "src/assets/car.txt";
public static void main(String[] args) {
try {
//FileNotFoundException
FileInputStream fis = new FileInputStream(new File(FILE_PATH));
}
catch (Exception e){
e.printStackTrace();
}
}
}
答案 5 :(得分:-1)
Ankit Lamba的建议有效:即使用String FILE_PATH = "assets/car.txt";