有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在我开始之前,我想说我今天花了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

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


共 (3) 个答案

  1. # 1 楼答案

    抛出第一个异常(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]);
    }
    

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

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


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

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

  2. # 2 楼答案

    这读取一个文件没有问题。我假设您正在运行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
    
  3. # 3 楼答案

    我不认为Java会把你搞得一团糟,一个找不到的文件就是一个找不到的文件,请在本期中通过你正在处理的文件和目录的屏幕来详细说明

    我想让你考虑一下下面的内容:

    1. FileReader
    2. Path of projects on Netbeans

    我希望这有助于代码与您在一起