无法在JAVA中打开文件

无法在JAVA中打开文件,java,bufferedreader,Java,Bufferedreader,我试图使用BufferedReader打开JAVA中的文件,但它无法打开该文件。这是我的密码 public static void main(String[] args) { try { BufferedReader reader = new BufferedReader(new FileReader("test.txt")); String line = null; while ((reader.readLine()!=

我试图使用BufferedReader打开JAVA中的文件,但它无法打开该文件。这是我的密码

 public static void main(String[] args) {


    try 
    {

       BufferedReader reader = new BufferedReader(new FileReader("test.txt"));

       String line = null;
        while ((reader.readLine()!= null))  
        {
            line = reader.readLine();
            System.out.println(line);
        }   
       reader.close();          
    }
    catch(Exception ex) 
    {
        System.out.println("Unable to open file ");             
    }

}

它进入异常,打印无法打开文件。任何我无法阅读的建议。

请先检查它是否存在:

File file = new File("test.txt");
if (!file.exists()) {
    System.err.println(file.getName() + " not found. Full path: " + file.getAbsolutePath());
    /* Handling code, or */
    return;
}
BufferedReader reader = new BufferedReader(new FileReader(file));
/* other code... */

我不知道为什么会发生这种情况,但问题似乎是我没有输入文件的完整路径,即使该文件位于同一文件夹中。理想情况下,如果文件位于同一文件夹中,则无需输入整个路径名。

如果您想更接近现代,请尝试Java 7解决方案,该解决方案取自
路径
Javadoc:

final Path path = FileSystems.getDefault().getPath("test.txt");  // working directory
try (final Reader r = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
    String line = null;        
    while ((line = r.readLine()) != null) {
        System.out.println(line);
    }
}  // No need for catch; let IOExceptions bubble up.
   // No need for finally; try-with-resources auto-closes.

您需要将
main
声明为抛出
IOException
,但这没关系。无论如何,您没有一致的方法来处理
IOException
。如果触发了异常,只需读取堆栈跟踪。

您想过打印异常消息吗?不要捕获
exception
。您将不知道它是什么类型的
异常。捕获特定的
IOException
。我同意上面的评论。使用“ex.printStackTrace()”代替System.out.println。这会给你一些基本的细节。如果非要我猜的话,问题在于您没有指定文件的路径。这会导致类似“FileNotFoundException”的情况。检查文件是否存在我怀疑您的系统中没有文件您正在接受异常及其消息,然后要求整个社区猜测问题?如果使用得当,Java的异常可以作为一种强大的机制来发现发生了什么,这是毫无意义的。异常消息可以告诉您相同的事情,或者可能是不同的事情,例如,如果您没有读取权限。它还容易受到时间窗口问题的影响:文件的存在可能会在
exists()
测试和构建
FileReader
之间发生变化。这也是多余的。没有什么值得推荐的。虽然时间安排是正确的,但我认为检查一下它是否存在,然后再处理就简单了一点。另一个需要考虑的是,文件Fix.So()返回false和Reader(file)抛出FieloToFunExtExpCET并不意味着同样的事情。file.exists()对于目录将返回true,对于您没有读取权限的普通文件可能返回true,而在这些情况下,读取器将抛出FileNotFoundException。编写更多代码从来都不是“简单的”。操作系统在打开文件时已检查是否存在。你自己再做一次完全没有意义。最后一句话是反对调用
exists()
的另一个论点。要使它具有任何有效性,您必须执行操作系统所做的所有原子检查,这仍然是多余的。我想在具体阅读文件时,这将是对我的一个反驳。这是我学习的方式,所以我坚持我的观点。对于这个特定的案例,它更多的是一个关于绝对路径的问题,但总的来说,我认为这将是一个很好的方式。我不能理解这一点,但你的建议仍然是多余的,容易出错的,并且容易出现计时窗口。