1

我试图编写一段 Java 代码来读取文件中的每一行并将其添加到 Arraylist。这是我的代码:

// try catch block removed for clarity.
file = new TextFileIn("names.txt");
String line = null;
while ((line = file.readLine()) != null) {
    list.add(line);
}

names.txt与我的代码位于同一包文件夹中。我使用的 IDE 是 Eclipse。但是,当我运行代码时,我得到了一个FileNotFoundException. 该类TextFileIn来自http://www.javaranch.com/doc/com/javaranch/common/TextFileIn.html

我怎样才能找到文件?

4

3 回答 3

2

您在访问文件时依赖于当前工作目录。工作目录取决于您启动应用程序的方式。在 Eclipse 中,它通常是项目根文件夹。在命令行中,它是当前打开的目录。您无法从 Java 代码内部对此进行控制,因此对于应该是应用程序本身一部分的文件,这被认为是一种不好的做法。

该文件显然与运行代码在同一个包中,因此它已经在类路径中,然后您可以(并且应该)直接从类路径中获取它。

InputStream input = getClass().getResourceAsStream("names.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
String line = null;

while ((line = reader.readLine()) != null) {
    // ...
}

如果您在static上下文中调用它,则替换getClass()YourClassName.classwhereYourClassName是此代码所在的类的名称。

也可以看看:

于 2011-04-10T14:18:31.327 回答
1

它位于包文件夹中。
“names.txt”是指项目根目录。所以你必须在你的源文件夹中搜索,比如“src/your.package/names.txt”。

于 2011-04-10T14:13:59.200 回答
0

您应该学习如何从命令行编译和运行程序,以及稍后如何更改 IDE 的设置,以执行相同的操作。基础知识是你可以随身携带的东西,从 IDE 到 IDE,从 eclipse 到 netbeans,再到 IntelliJ...。

即使您通过单击或从 IDE 从桌面运行,您实际上也坐在操作系统的文件夹中。在 Eclipse 中,运行代码时默认为您的 classes-dir,但可以在其中一个run as选项卡中进行修改,无论您的课程在哪里,它都是 ${PROJECT}/bin 或 ${PROJECT}/classes。所以你必须把你的文件放在那里,但请注意——如果你按“全部清除”或其他东西,它可能会被删除,所以请使用副本。

你为什么不使用 java.util.Scanner 而不是有趣的 TextFileIn?

Scanner scanner = new Scanner ("names.txt");
while (scanner.hasNextLine ())
    String line = scanner.nextLine ();
于 2011-04-10T14:25:52.093 回答