Java:没有什么会在这个文件中读取

问题描述:

在我开始之前,我想说我已经花了4小时今天,昨天6小时,并在研究这个问题前3小时。我已经阅读了我可以找到的每一篇文章,按照该信的每条说明,重新启动了我的项目,重新安装了我的IDE(Netbeans),甚至新安装了我的操作系统,但我还没有找到一条有用的建议,所以我想我需要寻求帮助。Java:没有什么会在这个文件中读取

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

所以这里是我的问题: 我想输入并从文件中读取,但是,结果总是找不到文件。下面是我的代码示例(它确实是到该ATM):

​​

这里有两个我得到的错误(我也得到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。

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

+1

'FileNotFoundException'意味着什么它说。在尝试访问该文件之前,打印完全限定路径并验证该文件是否正在尝试读取它的文件_actually_,因为显然它不是。 '文件f =新文件(args [0]); System.out.println(f.getAbsolutePath());' –

+0

已经完成了。我正在使用的路径与正确的文件一起显示。我的意思是,当我说我把文件的副本放在每个文件夹和子文件夹中时,以防万一。 – Jarbcd

+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 

我不认为Java会与您混淆一个未找到的文件是一个未找到的文件,请在屏幕上对您正在处理的文件和目录进行详细说明。

我想你考虑看看以下内容:

  1. FileReader
  2. Path of projects on Netbeans

我希望这有助于可能的代码与你同在。

+0

我欣赏输入。该文件存在于每个可能的子文件夹中,所以没有办法像“它不在那里”那样简单。恐怕我现在不在,但当我回来时,我会分享我的意思。 – Jarbcd

+0

好的,一旦你得到截图,请在这里留言,这样我就可以得到通知。 –

第一个异常(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类显示任何代码,因此很难判断出现问题的位置。


由于事实上,我已经把文件中的每个位置。在我的项目中的每个文件夹中都有一个副本,并且还在整个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()); 
      } 
     } 
    } 
} 

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

+0

我很欣赏这个输入。我做的第一件事是声明这个方法是抛出这个异常,但它仍然说该文件找不到。 问题在于错误不应该出现在第一位 – Jarbcd

+0

@Jarbcd您是否尝试过按照建议打印出文件名和路径? ('System.out.println(new File(args [0])。getAbsolutePath());') –