我启动程序时需要读取文本文件。我正在使用eclipse并启动了一个新的java项目。在我的项目文件夹中,我得到了“src”文件夹和标准的“JRE系统库”+ staedteliste.txt ...我只是不知道在哪里放文本文件。我真的尝试了我能想到的每个文件夹....我不能使用“硬编码”路径,因为文本文件需要包含在我的应用程序中...
我使用以下代码来读取文件,但是我收到此错误:
Error:java.io.FileNotFoundException:staedteliste.txt(No such file or directory)
public class Test {
ArrayList<String[]> values;
public static void main(String[] args) {
// TODO Auto-generated method stub
URL url = Test.class.getClassLoader().getResource("src/mjb/staedteliste.txt");
System.out.println(url.getPath()); // I get a nullpointerexception here!
loadList();
}
public static void loadList() {
BufferedReader reader;
String zeile = null;
try {
reader = new BufferedReader(new FileReader("src/mjb/staedteliste.txt"));
zeile = reader.readLine();
ArrayList<String[]> values = new ArrayList<String[]>();
while (zeile != null) {
values.add(zeile.split(";"));
zeile = reader.readLine();
}
System.out.println(values.size());
System.out.println(zeile);
} catch (IOException e) {
System.err.println("Error :"+e);
}
}
}
答案 0 :(得分:44)
首先问自己:您的文件是否是应用程序的内部组件? (这通常意味着它包含在您的JAR中,如果它是一个Web应用程序,则为WAR;通常,它是一些配置文件或静态资源,只读)。
如果答案是肯定的,则您不希望为文件指定绝对路径。但您不想使用相对路径(作为示例)访问它,因为Java假定路径相对于“当前目录”。通常,此方案的首选方法是从类路径中 加载。
Java为您提供了 classLoader.getResource() 方法。 Eclipse(在正常设置中)假设src/
位于类路径的根目录中,因此在编译之后,它会将所有内容复制到输出目录(bin/
),编译中的java文件表格(.class
),其余部分原样。
因此,例如,如果您将文件放在src/Files/myfile.txt
中,它将在编译时复制到bin/Files/myfile.txt
;并且,在运行时,bin/
将位于类路径的(根)中。因此,通过调用getResource("/Files/myfile.txt")
(在某些变体中),您将能够阅读它。
已编辑:此外,如果您的文件在概念上与java类相关联(例如,某些com.example.MyClass
具有MyClass.cfg
关联的配置文件),则可以使用{ {3}}并使用(资源)相对路径:MyClass.getResource("MyClass.cfg")
。然后将在类路径中搜索该文件,但预先附加类包。因此,在这种情况下,您通常会将MyClass.cfg
和MyClass.java
文件放在同一目录中。
答案 1 :(得分:9)
要走的一条路是
使用资源加载程序找到文件:
URL url = Test.class.getClassLoader().getResource("myfile.txt");
System.out.println(url.getPath());
...
答案 2 :(得分:3)
只需在Files
下创建一个文件夹src
,然后将文件放在那里。
这看起来像src/Files/myFile.txt
注意:强>
在您的代码中,您需要指定Files/myFile.txt
e.g。
getResource("Files/myFile.txt");
因此,当您构建项目并运行.jar文件时,这应该能够正常工作。
答案 3 :(得分:2)
假设您在Eclipse上有一个名为“TestProject”的项目,而您的工作区文件夹位于E:/ eclipse / workspace。构建Eclipse项目时,类路径为e:/eclipse/workspace/TestProject
。当您尝试阅读“staedteliste.txt”时,您尝试访问e:/eclipse/workspace/TestProject/staedteliste.txt
处的文件。
如果您想为项目创建单独的文件夹,请在TestProject下创建Files文件夹,然后使用(相对路径)/Files/staedteliste.txt
访问该文件。如果您将文件放在src文件夹下,则必须使用/src/staedteliste.txt
访问它。 src文件夹中的Files文件夹为/src/Files/staedteliste.txt
不是使用相对路径,而是可以通过在开头添加e:/eclipse/workspace/
来使用绝对路径,但使用相对路径更好,因为只要项目文件夹,您就可以移动项目而无需担心重构结构是一样的。
答案 4 :(得分:0)
根据您的Java类包名称,您可能在目录结构中有4或5个级别。
如果你的Java类包是com.stackoverflow.project,那么你的类位于src / com / stackoverflow / project。
您可以使用多个../
向上移动目录结构,也可以将文本文件移动到与您的类相同的包中。移动文本文件会更容易。
答案 5 :(得分:0)
你应该看一下ClassLoader类中各种各样的getResource:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html
答案 6 :(得分:0)
MJB
请试试这个
在eclipse中“右键单击”你要使用的文本文件, 查看并复制存储在HDD中的完整路径(如果在UNIX中为“/home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/testfile.txt”)
把这条完整的路径试试。
如果它有效,那么类路径问题就是GOK:)
答案 7 :(得分:0)
如果这是一个简单的项目,您应该能够将txt文件直接拖到项目文件夹中。具体来说,“项目文件夹”将是最高级别的文件夹。我试图通过将txt文件放在src文件夹中来做这个(对于我正在做的家庭作业项目),但这不起作用。但最后我想出把它放在项目文件中。
这是一个很好的教程http://www.vogella.com/articles/JavaIO/article.html。我用这个作为i / o的介绍,它有所帮助。
答案 8 :(得分:0)
看看这个video
你所要做的就是选择你的文件(假设它是同一个简单形式的txt文件),然后将它拖到Eclipse中的项目中然后放在那里。选择复制而不是链接,因为它更灵活。就是这样 - 我只是试过了。