【问题标题】:java can't scan from a text file even though it's in my working directory即使它在我的工作目录中,java也无法从文本文件中扫描
【发布时间】:2018-09-26 21:15:06
【问题描述】:
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());

}
}

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

【问题讨论】:

  • 如果您在命令提示符下执行dir C:\Users\steve\eclipse-workspace\a3\names.txt,它会列出文件吗?
  • 文件实际上是否名为names.txt.txt 并且扩展名只是隐藏在您的视图中?似乎发生在 Windows 机器上。
  • 命令提示符列出文件,names.txt.txt不起作用
  • 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。

标签: java io java.util.scanner


【解决方案1】:

请检查您的names.txt的绝对路径,如下:

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

它会告诉你 JVM 期望在哪里找到文件,以及它是否也在你期望的文件夹中。

【讨论】:

    【解决方案2】:

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

    您可能还使用隐藏文件类型将其命名为 names.txt,因此现在将其命名为 names.txt.txt,这有时发生在我身上:D

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 不,绝对路径不起作用,但我在这里发布的某种格式可以,我知道为什么
      【解决方案4】:

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

      在你的情况下,这 2 显然不相等。

      你可以选择这个:

      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");
      

      或者如果这个 names.txt 和你的类文件在同一个地方:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        • 2011-11-20
        • 2013-06-16
        • 1970-01-01
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多