在 eclipse 中放置我想使用的文本文件在哪里?

2022-09-01 16:46:26

启动程序时,我需要读取文本文件。我正在使用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);
    }
}

}


答案 1

首先问问自己:您的文件是应用程序的内部组件吗?(这通常意味着它被打包在你的JAR中,或者如果它是一个Web应用程序,则为WAR;通常,它是一些配置文件或静态资源,只读)。

如果答案为“是”,则不想为文件指定绝对路径。但是您也不想使用相对路径(如您的示例)访问它,因为Java假设该路径相对于“当前目录”。通常,此方案的首选方法是相对从类路径加载它。

Java 为您提供了 classLoader.getResource() 方法来执行此操作。而 Eclipse(在正常设置中)假设它位于类路径的根目录中,因此,在编译后,它将所有内容复制到输出目录 ( ),编译形式的 java 文件 ( ),其余的按原样。src/bin/.class

因此,例如,如果您将文件放入 ,它将在编译时复制到 ;并且在运行时,将位于类路径的(根)中。因此,通过调用(在其某些变体中),您将能够读取它。src/Files/myfile.txtbin/Files/myfile.txtbin/getResource("/Files/myfile.txt")

编辑:此外,如果你的文件在概念上绑定到java类(例如,有些有一个关联的配置文件),你可以使用类中的getResource()方法,并使用(资源)相对路径:。然后,将在类路径中搜索该文件,但会预先附加类包。因此,在这种情况下,您通常会将 和 文件放在同一目录中。com.example.MyClassMyClass.cfgMyClass.getResource("MyClass.cfg")MyClass.cfgMyClass.java


答案 2

要采取的一条路径是

  1. 将您正在使用的文件添加到类路径
  2. 使用资源加载程序查找文件:

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. 打开