用Java读取文件(使用IDE)

用Java读取文件(使用IDE),java,java-io,Java,Java Io,我试图编写一段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

我试图编写一段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
类来自


如何找到该文件?

它位于软件包文件夹中
“names.txt”正在引用项目根目录。因此,您必须在源文件夹中搜索,如“src/your.package/names.txt”。

在访问文件时,您依赖于当前的工作目录。工作目录取决于您如何启动应用程序。在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) {
    // ...
}
如果您在
静态
上下文中调用此函数,请将
getClass()
替换为
YourClassName。class
其中
YourClassName
是此代码所在的类的名称

另见:

您应该了解如何从命令行编译和运行程序,以及稍后如何更改IDE的设置,以便执行相同的操作。从IDE到IDE,从eclipse到netbeans,再到IntelliJ,基本知识都可以随身携带

即使您通过单击或从IDE从桌面运行,您实际上也处于操作系统的文件夹中。在eclipse中,在运行代码时,默认情况下,它是您的类目录,但是可以在
运行方式
选项卡之一中进行修改,并且无论您的类在哪里,它都是${PROJECT}/bin或${PROJECT}/classes。所以你必须把你的文件放在那里,但是请注意,如果你按“全部清除”或其他什么,它可能会被删除,所以请使用副本

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

Scanner scanner = new Scanner ("names.txt");
while (scanner.hasNextLine ())
    String line = scanner.nextLine ();

您是否尝试过使用“names.txt”的完整路径?如果这是一个可接受的解决方法,它应该可以做到。我在java ranch牛道上做练习,问题是我需要使用TextFileIn,以防您好奇:)。我知道JavaRanch,但链接到该教程就可以了。Scanner不是镇上最小的孩子——在以前的时代(1.4),处理文件有点麻烦:Wrapper-around-Wrapper-
r=new-BufferedFileReader(new-InputStreamReader(new-LineInputStream)(new-File(name‘‘)’)或类似的东西。所以很多老师制作了一个更容易使用的课堂,现在他们的材料传播开来,没有更新到新的Scanner.class,它是JDK/JRE的一部分。也许牧场应该更新他们的网页?