指定目录时出现Java.io.FileNotFoundException

时间:2018-08-13 23:10:31

标签: java filereader

我正在尝试使用名为“ helloworld”的txt文件在Java中定义文件。我已将此文件放置在资源文件夹中,并且在制作文件时按如下方式定义它:

File file = new File("/helloworld");

但是在编译时出现此错误

 Exception in thread "main" java.io.FileNotFoundException: /helloworld 
    (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileReader.<init>(FileReader.java:72)
    at Tests.main(Tests.java:15)

这是我尝试执行的全部代码,如果有帮助解决此问题

// Java Program to illustrate reading from FileReader
// using BufferedReader
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URL;
public class Tests
{
  public static void main(String[] args)throws Exception
  {


      File file = new File("/helloworld");

      BufferedReader br = new BufferedReader(new FileReader(file));

      String st;
      while ((st = br.readLine()) != null)
        System.out.println(st);
  }
}

谢谢您的帮助!

4 个答案:

答案 0 :(得分:0)

public File​(String pathname)
     

通过转换给定的路径名​​字符串来创建新的File实例   转换为抽象路径名。如果给定的字符串是空字符串,   那么结果就是空的抽象路径名。

您正在尝试创建新的File实例,但是找不到名为helloworld的文件或其他原因。那就是为什么你得到错误,

 Exception in thread "main" java.io.FileNotFoundException: /helloworld
  1. 命名文件不存在。
  2. 命名文件实际上是一个目录。
  3. 由于某些原因,无法打开指定文件进行读取。

您说您尝试定义一个文件,但是您的代码似乎可读。如果要创建文件

,请尝试以下一个
import java.io.*;
import java.nio.charset.StandardCharsets;


class TestDir {
    public static void main(String[] args) {
        String fileName = "filename.txt";

        try (Writer writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(fileName), StandardCharsets.UTF_8))) {
            writer.write("write something in text file");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

这很容易诊断:您指定的路径以斜杠开头,因此,意味着该文件应位于文件系统的根目录中。您最好先去除斜线,然后:

  • 可以在文件所在的同一目录中启动程序。
  • 实例化File对象时,请在代码中指定绝对/相对路径。

答案 2 :(得分:0)

如果文件位于资源文件夹中并打算与程序捆绑在一起,则需要将其视为资源而不是文件。

这意味着您不应使用File类。您应该使用Class.getResourceClass.getResourceAsStream方法读取数据:

BufferedReader br = new BufferedReader(
    new InputStreamReader(
        Tests.class.getResourceAsStream("/helloworld")));

如果要将程序作为.jar文件分发,则这一点尤其重要。 .jar文件是压缩的归档文件(实际上是具有不同扩展名的zip文件),其中包含已编译的类文件和资源。由于它们都被压缩到一个.jar文件中,因此它们根本不是单独的文件,因此File类无法引用它们。

尽管File类对于您要执行的操作没有用,但是您可能希望研究绝对文件名相对文件名的概念。/开头的文件名,您指定的是绝对文件名,这意味着您要告诉程序在特定位置寻找文件-几乎可以肯定不会驻留该文件的位置。

答案 3 :(得分:0)

尝试下面的命令来了解程序正在寻找的文件夹或文件的路径在哪里

System.out.println(file.getAbsolutePath());

使用

File file = new File("/helloworld");

我认为您的程序正在寻找c:\helloworld,并且helloword驱动器中没有文件或文件夹的名称为C

如果将helloword.txt放入C驱动器中,则

File file = new File("C:\\helloworld.txt");

FileNotFoundException将消失。