Java无法从文本文件进行扫描,即使它位于我的工作目录中

时间:2018-09-26 21:15:06

标签: java io java.util.scanner

import java.util.Scanner;
import java.io.*;
public class scanners {

    public static void main(String[] args) {
        File testFile = new File("names.txt");
        // Scanner sc = new Scanner(testFile);
        System.out.println(System.getProperty("user.dir"));
    }
}

此代码的输出为C:\Users\steve\eclipse-workspace\a3,并且我的names.txt放置在此文件夹中。但是,当我取消注释创建扫描程序对象的代码时,会得到FileNotFoundException。我究竟做错了什么?

编辑

import java.util.Scanner;
import java.io.*; 

public class scanners {

public static void main(String[] args) {
    Scanner sc = null;
    try {
        sc = new Scanner(new File("names.txt"));
    }
    catch(FileNotFoundException e) {
        System.out.println("Problem reading the data file. Returning null for Scanner"
                        + "object. Problems likely to occur." + e);
    }

    System.out.println(sc.nextLine());

}
}

由于某种原因,这种格式可以正常工作,但我之前发布的格式却不行。我真的不知道为什么。

4 个答案:

答案 0 :(得分:0)

请使用以下命令检查您的names.txt的绝对路径:

System.out.println(new File("names.txt").getAbsolutePath());

它将向您显示JVM希望在哪里找到文件,以及文件是否也存在于您期望的文件夹中。

答案 1 :(得分:0)

尝试直接在eclipse中添加文本文件,在包资源管理器中,右键单击您的项目,然后单击添加->未命名的文本文件,将其另存为names.txt。

您可能还用隐藏的文件类型将其命名为names.txt,所以现在将其命名为names.txt.txt,有时候我就遇到了:D

答案 2 :(得分:0)

我认为代码很可能实际上没有在您认为确实存在的目录中运行。如果将File testFile = new File("names.txt");替换为File testFile = new File("C:\Users\steve\eclipse-workspace\a3\names.txt");,是否可行?如果是这样,请在eclipse中检查您的“运行配置”,以确保您实际上在该文件夹中运行

答案 3 :(得分:0)

systemproperty'user.dir'是指用户的主目录。这与“当前工作目录”不同,后者是解析相对路径的目录。

在您的情况下,两个显然不相等。

您可以选择以下方法:

new File(getSystemProperty("user.dir"), "names.txt");

或者您可以指定一个绝对路径,并记住在Java中,反斜杠是字符串转义符,因此,它看起来像:

new File("C:/Users/steve/eclipse-workspace/a3/names.txt");

或者:

new File("C:\\Users\\steve\\eclipse-workspace\\a3\\names.txt");

或者如果这个name.txt东西与您的班级文件放在同一位置:

new Scanner(ClassYouAreIn.class.getResourceAsStream("names.txt"), StandardCharsets.UTF_8);