我想在eclipse中使用哪个文本文件?

时间:2010-05-17 16:04:33

标签: java eclipse file-io readfile

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

}

9 个答案:

答案 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.cfgMyClass.java文件放在同一目录中。

答案 1 :(得分:9)

要走的一条路是

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

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

答案 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

请试试这个

  1. 在eclipse中“右键单击”你要使用的文本文件, 查看并复制存储在HDD中的完整路径(如果在UNIX中为“/home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/testfile.txt”)

  2. 把这条完整的路径试试。

  3. 如果它有效,那么类路径问题就是GOK:)

答案 7 :(得分:0)

如果这是一个简单的项目,您应该能够将txt文件直接拖到项目文件夹中。具体来说,“项目文件夹”将是最高级别的文件夹。我试图通过将txt文件放在src文件夹中来做这个(对于我正在做的家庭作业项目),但这不起作用。但最后我想出把它放在项目文件中。

这是一个很好的教程http://www.vogella.com/articles/JavaIO/article.html。我用这个作为i / o的介绍,它有所帮助。

答案 8 :(得分:0)

看看这个video

你所要做的就是选择你的文件(假设它是同一个简单形式的txt文件),然后将它拖到Eclipse中的项目中然后放在那里。选择复制而不是链接,因为它更灵活。就是这样 - 我只是试过了。