【问题标题】:Where to put a textfile I want to use in eclipse?将我想在 Eclipse 中使用的文本文件放在哪里?
【发布时间】:2010-05-17 16:04:33
【问题描述】:

我需要在启动程序时读取一个文本文件。我正在使用 eclipse 并开始了一个新的 java 项目。在我的项目文件夹中,我得到了“src”文件夹和标准的“JRE System Library”+ 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);
    }
}

}

【问题讨论】:

  • 从 Eclipse 启动应用程序时,您可以配置启动目录。你确定你没有不小心配置错误吗? new File(".").getAbsolutePath() 会告诉你。

标签: java eclipse file-io readfile


【解决方案1】:

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

如果答案是肯定的,您不想为文件指定绝对路径。但是您既不想使用相对路径(作为您的示例)来访问它,因为Java 假定路径是相对于“当前目录”的。通常这种情况下的首选方式是从类路径相对加载

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

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

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

【讨论】:

  • 文件夹并不重要,我只是想用一个文件夹来做,因为我不知道还能做什么。无论如何,我尝试了“Greg Adamski”的代码,但它没有t工作....
  • Greg 的代码应该可以工作。 “测试”是具有您的主要方法的类吗? (这不是必需的)您是否在 Eclipse 中进行了完整构建,您的文件是否被复制到您的 bin/ 目录中?
  • 是的...我知道,这不是最佳实践,但您可能猜到它只是一个测试...我的项目被称为“测试”,所以我唯一拥有主要方法的类也是如此。 ....我无法构建它,因为我得到了 NPexception... :/ 如果我注释掉我得到 NPeception-error 的行,我会再次得到 fileNotFoundException ......但是是的......当我得到 filenotfound -exc,文件被复制到“bin”文件夹中。
  • "我无法构建它,因为我得到了 NPexception" ... erhmmm ...您首先构建(项目 -> 全部构建),即编译它;之后你跑。 NPE 应该在运行期间出现,在构建之后。
【解决方案2】:

一条路是走

  1. 将您正在使用的文件添加到类路径中
  2. 使用资源加载器定位文件:

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

【讨论】:

  • public static void main(String[] args) { URL url = Test.class.getClassLoader().getResource("staedteliste.txt"); System.out.println(url.getPath());当我到达 s.o.p 行时,我得到一个 NullPointerException。我将文件放入 src/ 文件夹和项目的根目录中,在“Test/..”中
  • 您需要确保您的文件显示在 Eclipse 的 src 目录下。如果您只是将其复制到使用资源管理器中,则需要刷新项目才能显示。
  • 在我的 Eclipse 包资源管理器中,我的项目名为“测试”。当我展开“测试”时,我看到“src”、“JRE SystemLibrary”和“staedteliste.txt”(按此顺序)。我只是点击刷新并再次运行代码,但仍然是 NPExc ..
  • staedteliste.txt 需要在 src 下,而不是在它旁边。
  • 你的意思是在里面!...?但是,我真的把每个文件夹都放进去了……不起作用……:/
【解决方案3】:

假设您在 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/,但是使用相对路径更好,因为你可以移动项目而不用担心重构,只要项目文件夹结构是一样的。

【讨论】:

  • 不起作用。我现在得到一个 NullPointerException .. 我真的把文件放在我能想到的任何地方并相应地改变了路径,......什么都没有......
【解决方案4】:

只需在src 下创建一个文件夹Files 并将您的文件放在那里。 这看起来像src/Files/myFile.txt

注意: 在您的代码中,您需要像这样指定Files/myFile.txt 例如

getResource("Files/myFile.txt");

因此,当您构建项目并运行 .jar 文件时,它应该能够工作。

【讨论】:

  • 文件夹名不应该小写吗?
  • 对我不起作用,我不得不按照 Mark 的建议将文件放入主项目目录。
【解决方案5】:

根据您的 Java 类包名称,您可能比目录结构低 4 或 5 级。

如果您的 Java 类包是例如 com.stackoverflow.project,那么您的类位于 src/com/stackoverflow/project。

您可以使用多个../ 向上移动目录结构,也可以将文本文件移动到与您的班级相同的包中。移动文本文件会更容易。

【讨论】:

  • 我的包名是“mjb”,所以我使用了“src/mjb/staedteliste.txt”。即使我将 .txt 文件放在每个文件夹中,我都会收到空指针异常。
【解决方案6】:

MJB

请试试这个

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

  2. 把这个完整的路径放上去试试。

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

【讨论】:

    【解决方案7】:

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

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

    【讨论】:

      【解决方案8】:

      看看这个video

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

      【讨论】:

        【解决方案9】:

        您可能应该看看 ClassLoader 类中 getResource 的各种风格:https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ClassLoader.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-29
          相关资源
          最近更新 更多