【问题标题】:FileInputStream not finding the file [closed]FileInputStream 找不到文件[关闭]
【发布时间】:2013-03-12 17:28:51
【问题描述】:

我正在用java编写一个程序,它将读取一个文件并将其中的每个单词放入一个数组中,这样我就可以在将它们排序到默认数组后对每个单词进行一个字谜。我很清楚如何做到这一点,除了我的 .txt 文件没有被读取。我在 src 中有一个名为“input.txt”的文件,其中包含我正在编写的“anagram.java”程序,但是当代码提示文件条目时,在输入文件名“input.txt”时,我的代码说该文件不存在,我明白了:

Enter file name: 
input.txt
Exception in thread "main" java.io.FileNotFoundException: input.txt (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:120)
        at java.io.FileInputStream.<init>(FileInputStream.java:79)
        at java.io.FileReader.<init>(FileReader.java:41)
        at anagram.main(anagram.java:23)
Java Result: 1
BUILD SUCCESSFUL (total time: 6 seconds)

这是出现问题的那一行的代码:

    public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter file name: ");
    String fileName = br.readLine();
    File file = new File(fileName);
    if(file.length() == 0)
    {
        System.out.println("File is empty");
        System.exit(1);
    }

显然输入“input.txt”的信息不够多,我不确定。我删除了

    if(file.length() == 0)
    {
        System.out.println("File is empty");
        System.exit(1);
    }

为了得到我上面所说的错误,这就是我发现它甚至无法使用 anagram.java prgm 识别 src 中的文件的方法。

我的代码有什么问题?为什么它不读取文件或说它不存在?

【问题讨论】:

  • 当你有标签时,你不必在标题中指定JAVA。
  • 您必须提供文件的完整路径。在 Windows 中,这将是 C:\directory\subdirectory\input.txt
  • 您是否尝试过指定完整路径?如果你从 bin 开始你的程序,它不知道在哪里寻找文件。
  • 您发布的代码不会引发该异常。再看看堆栈跟踪。
  • @GilbertLeBlanc 不,您不必提供完整路径,但如果您不提供,则名称必须与当前工作目录相关。

标签: java java-io


【解决方案1】:

我敢说该文件位于src 目录中 - 但我怀疑这不是程序的当前工作目录。要检查这一点,请运行以下代码:

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

选项:

  • 指定绝对文件名
  • 指定一个相对文件名,考虑到你在哪里运行它
  • 将文件捆绑为资源并使用Class.getResourceAsStream 或类似名称

请注意,这与 BufferedReader 无关 - 您正在阅读来自 System.in 的文本,没有任何问题。

【讨论】:

  • 太棒了!事实上,它不是从 src 文件中读取的。我现在正在阅读该文件,但我得到了一个复杂的括号和斜杠输出,看起来像一些格式化代码。该文件最初是 .rtf,但是当我将其更改为 .txt 时,当我使用 dropmenu 选择“获取信息”查看文件的信息时,我注意到了这一点,我会将其恢复为 rtf,看看会发生什么......
  • @RyanTibbetts:不清楚您所说的“将其更改为 .txt”是什么意思 - 重命名文件不会更改其上下文。听起来您确实看到了 RTF...
  • 我将其还原为 .rtf,尽管信息选项卡显示正常,但程序似乎仍在按字面意思阅读。
  • @RyanTibbetts:是的,它会的。您要求它只读取文件的文本 - 文件的文本 is 是 RTF 内容。听起来您需要理解 RTF 的代码 - 或更改您的源数据。无论哪种方式,这都是一个单独的问题。
  • 确实,谢谢乔恩的帮助。
【解决方案2】:

它正在寻找与您的源目录不同的路径。尝试指定像 c:\input.txt 这样的完整路径(但不要忘记将文件移到那里!)看看我的意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多