【问题标题】:Java: Nothing will read in this fileJava:此文件中不会读取任何内容
【发布时间】:2017-04-20 20:45:41
【问题描述】:

在开始之前,我想说我今天花了 4 小时、昨天 6 小时和之前 3 小时来研究这个问题。我已经阅读了我能找到的每一篇文章,遵循了每一条说明,重新启动了我的项目,重新安装了我的 IDE(Netbeans),甚至重新安装了我的操作系统,但我没有找到一条有用的建议,所以我想我需要寻求帮助。

是的,我已将文件放在正确的位置 ...事实上,我已将文件放在每个位置。在我的项目中的每个文件夹中都有一个副本,在整个项目文件夹中以及在我的文档中也有一个副本。我已经多次检查并更改并默认根目录。请不要告诉我只使用异常处理程序。程序读取的文件保证存在并且包含一些东西。

所以这是我的问题: 我正在尝试从文件中输入和读取,但是,结果总是找不到该文件。这是我的代码示例(实际上取决于此 atm):

package project2;
import java.io.FileReader;
import java.io.*;
import java.util.Scanner;
public class Project2 {
    public static void main(String[] args) {
        FileReader inputFile = new FileReader(args[0]);
    }
}

这是我得到的两个错误(我也得到 Filenotfound 错误,但我认为我不需要添加):

Exception in thread "main" java.lang.RuntimeException: Uncompilable source 
code - unreported exception java.io.FileNotFoundException; must be caught or 
declared to be thrown
    at project2.Project2.main(Project2.java:14)
C:\Users\jarre\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: 
Java returned: 1
BUILD FAILED (total time: 1 second)

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at project2.Project2.main(Project2.java:24)
C:\Users\jarre\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: 
Java returned: 1
BUILD FAILED (total time: 0 seconds)

就是这样。文件名来自参数,我已经尝试了所有可能的名称变体。我尝试在参数之外命名文件,就像文件名本身以及显式文件路径一样。

使用扫描仪无法读取任何内容。FileReader 甚至无法运行。

文本文件没有特殊格式或字符,我使用了我提供的一个和多个我手动输入的文件,以防我收到的文件有问题。我还确保“.txt”永远不会被读取或使用两次(无论如何,我保持我的扩展名)。 我已经检查了所有文件和 Netbeans 程序本身的属性和权限。我还确保文本文件包含在项目构建中。

我现在没有使用任何额外的代码,因为我不能做任何事情,直到我确定我可以读入一个文件,然后也输出一个。我也知道文本文件没有损坏,因为我可以在 Python 中很好地读取它们,但是,我必须使用 Java,而且我必须使用 Netbeans。

这对我来说是一个新问题,我一直能够很好地读取文件,而且我已经用尽了我的选择。如果有人有任何想法,我真的需要一些帮助。

【问题讨论】:

  • FileNotFoundException 的意思正是它所说的。在尝试访问该文件之前,打印出完全限定的路径并验证该文件实际上是您尝试从中读取它的位置,因为显然它不是。 File f = new File(args[0]); System.out.println(f.getAbsolutePath());
  • 已经完成了。我使用的路径与正确的文件一起显示。当我说我将文件副本放在每个文件夹和子文件夹中时,我的意思是,以防万一。
  • 请分享您用来调用应用程序的命令,以及我上述请求的输出。路径有空格吗?特殊的角色?你是否有适当的权限来寻找这个位置?
  • C:\Users\jarre\Documents\NetBeansProjects\Project2\crazy.txt 我在我的 IDE 中运行它,不,我不认为任何东西包含任何奇怪或特殊的字符.
  • 首先要尝试排除问题的来源。您可以尝试直接从命令运行应用程序,看看它是否按预期工作:“javac Project2.java”后跟“java Project2 C:\Users\jarre\Documents\NetBeansProjects\Project2\crazy.txt”

标签: java netbeans file-io java.util.scanner filereader


【解决方案1】:

第一个异常 (java.lang.RuntimeException: Uncompilable source code) 被抛出,因为您向我们展示的代码不是有效的 java 源代码。

new FileReader(args[0]) 被声明为抛出 FileNotFoundException,根据 Java 语言的规则,您要么必须捕获此异常,要么声明您的 main 方法为抛出此异常。

解决此问题的一种方法是编写您的 main 方法,如下所示:

public static void main(String[] args) throws FileNotFoundException {
    FileReader inputFile = new FileReader(args[0]);
}

您似乎已经解决了这个问题,因为如果您尝试读取文件末尾,Scanner.nextLine() 方法会引发第二个异常 (java.util.NoSuchElementException: No line found)。

由于您没有使用Scanner 类显示任何代码,因此在这种情况下很难判断问题出在哪里。


事实上,我已将文件放在每个位置。在我的项目中的每个文件夹中都有一个副本,在整个 Projects 文件夹中以及在我的文档中也有一个副本。

不要那样做。您正在创建难以清理的文件。如果您想知道您的程序正在读取哪个文件,那么添加以下简单的行会告诉您确切的路径和文件名:

System.out.println(new File(args[0]).getAbsolutePath());

你有没有尝试过这样一个简单、最小的例子:

package project2;
import java.io.FileReader;
import java.io.*;
import java.util.Scanner;
public class Project2 {
    public static void main(String[] args) {
        System.out.println(new File(args[0]).getAbsolutePath());
        FileReader inputFile = new FileReader(args[0]);
        try (Scanner s = new Scanner(inputFile)) {
            while (s.hasNextLine()) {
                System.out.println(s.nextLine());
            }
        }
    }
}

它应该打印出带有完整路径的文件名,然后逐行打印出文件的内容。

【讨论】:

  • 感谢您的意见。我做的第一件事就是声明该方法抛出了这个异常,它仍然说找不到文件。问题在于首先不应该出现错误
  • @Jarbcd 您是否尝试按照建议打印出文件名和路径? (System.out.println(new File(args[0]).getAbsolutePath());)
【解决方案2】:

我不认为 Java 对您造成困扰,未找到的文件就是未找到的文件,请在此问题中通过您正在处理的文件和目录的屏幕来详细说明。

我希望您考虑看看以下内容:

  1. FileReader
  2. Path of projects on Netbeans

我希望这对你有帮助。

【讨论】:

  • 感谢您的意见。该文件存在于每个可能的子文件夹中,因此不可能像“它不存在”那么简单。恐怕我现在出去了,但是当我回来时,我会分享我的意思的截图。
  • 好的,请在收到截图后在此发表评论,以便我收到通知。
【解决方案3】:

这可以毫无问题地读取文件。我假设您正在运行 JDK 8。

/**
 * Read a file example
 * User: mduffy
 * Date: 4/21/2017
 * Time: 7:48 AM
 * @link http://stackoverflow.com/questions/43529600/java-nothing-will-read-in-this-file
 */

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Project2 {
    public static void main(String[] args) {
        if (args.length > 0) {
            BufferedReader reader = null;
            try (BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]))) {
                bufferedReader.lines().forEach(System.out::println);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("Usage: Project2 <file>");
        }
    }
}

这是我使用的输入文件:

line1
line2
hello, michael
line 4

这是我得到的输出:

java Project2 .\src\main\resources\test.txt
line1
line2
hello, michael
line 4

Process finished with exit code 0

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多