Java: 不会读取此文件中的任何内容

Java: Nothing will read in this file

在开始之前,我想说我今天花了 4 个小时,昨天花了 6 个小时,之前花了 3 个小时研究这个问题。我已经阅读了所有我能找到的 post,严格按照每条说明进行操作,重新启动了我的项目,重新安装了我的 IDE (Netbeans),甚至全新安装了我的 OS,但我还没有找不到一条有用的建议,所以我想我需要寻求帮助。

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

所以这是我的问题: 我正在尝试输入和读取文件,但是结果总是找不到文件。这是我的代码示例(它真的取决于这个 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.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.2\executor-snippets\run.xml:53: 
Java returned: 1
BUILD FAILED (total time: 0 seconds)

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

使用扫描仪不会让我读取任何内容。FileReader 甚至不会 运行。

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

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

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

我不认为 Java 是在逗你,一个找不到的文件就是一个找不到的文件,请在这个问题上通过你正在处理的文件和目录的屏幕来详细说明。

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

  1. FileReader
  2. Path of projects on Netbeans

我希望这对您有所帮助,希望代码与您同在。

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

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

解决此问题的一种方法是像这样编写您的主要方法:

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

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

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


As a matter of fact, I've put the file in EVERY location. There's a copy in every folder inside my project and also a copy in the overall Projects folder, and also in My Documents.

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

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());
            }
        }
    }
}

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

这样读取文件没有问题。我假设你是 运行 JDK 8.

/**
 * Read a file example
 * User: mduffy
 * Date: 4/21/2017
 * Time: 7:48 AM
 * @link 
 */

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