在我开始之前,我想说我今天花了4个小时,昨天花了6个小时,在研究这个问题之前的3个小时。我已经阅读了我能找到的每一篇文章,按照每个指令写信,重新启动我的项目,重新安装我的IDE(Netbeans),甚至新安装了我的操作系统,我还没有找到一条有用的建议,所以我想我需要寻求帮助。
并且是的,我已将文件放在正确的位置 ...事实上,我已将文件放在每个位置。我的项目中的每个文件夹中都有一个副本,还有整个Projects文件夹中的副本,以及My Documents中的副本。我已多次检查并更改并默认根目录。请不要告诉我只使用异常处理程序。程序读入的文件保证存在并包含一些内容。
所以这是我的问题: 我正在尝试输入和读取文件,但结果总是无法找到该文件。这是我的代码的一个例子(它真的是这个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)
就是这样。文件名来自参数,我尝试了名称的每个可能的变体。我试过在参数之外命名文件,只是文件名本身以及显式文件路径。
使用扫描仪不会让我读取任何内容。文件读取器甚至不会运行。
文本文件没有特殊的格式或字符,我已经使用了我提供的那个和我输入的多个,以防万一我遇到的问题。我还确保“.txt”永远不会被读取或使用两次(无论如何我保持扩展名)。 我检查了所有文件的属性和权限以及Netbeans程序本身。我还确保文本文件包含在项目构建中。
我现在没有使用任何其他代码,因为在我确定我可以读取文件然后输出一个之前我无法做任何事情。我也知道文本文件没有损坏,因为我可以用Python阅读它们,但是,我必须使用Java,我必须使用Netbeans。
对我来说这是一个新问题,我一直能够很好地阅读文件,而且我已经筋疲力尽了。如果有人有任何想法,我真的需要一些帮助。
答案 0 :(得分:2)
抛出第一个异常(java.lang.RuntimeException: Uncompilable source
code
),因为您向我们展示的代码不是有效的java源代码。
new FileReader(args[0])
被声明为抛出FileNotFoundException
,并且根据java语言的规则,您必须捕获此异常或将main方法声明为抛出此异常。
解决此问题的一种方法是编写这样的主方法:
public static void main(String[] args) throws FileNotFoundException {
FileReader inputFile = new FileReader(args[0]);
}
您似乎已经解决了这个问题,因为如果您尝试读取文件的末尾,java.util.NoSuchElementException: No line found
方法会抛出第二个异常(Scanner.nextLine()
)。
由于您没有使用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());
}
}
}
}
它应该用完整的路径打印出文件的名称,然后逐行打印出文件的内容。
答案 1 :(得分:0)
我不认为Java正在乱搞你找不到的文件是一个未找到的文件,请通过你正在处理的文件和目录的屏幕详细说明这个问题。
我希望您考虑一下以下内容:
我希望这有助于代码与您同在。
答案 2 :(得分:0)
这样可以毫无问题地读取文件。我假设您正在运行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