java - 尝试创建新文件会抛出 FileNotFoundException 但文件存在于同一包中

标签 java file filenotfoundexception

我有一个 csv 文件,其路径与其他文件的路径相同。现在,当我尝试创建一个 File 对象时:

public void getMenu() {

    File fileMenu = new File("FastFoodMenu.csv");

    try {
        Scanner inputStream = new Scanner(fileMenu);
        while (inputStream.hasNext()) {
            String data = inputStream.next();
            System.out.println(data);
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(FileHandler.class.getName()).log(Level.SEVERE, null, ex);
    }

}

它抛出 FileNotFoundException

项目中所有文件的绝对路径是:

C:\Users\kenyo\Documents\NetBeansProjects\OrderFastFood\src\fastfoodorderingsystem

我也检查过这个名字几次。 fileMenu.exists()返回 false。

最佳答案

首先,在您的根/工作目录(在您的情况下是包含项目的文件夹)中,创建一个名为“menus”的文件夹,在这里您可以存储所有菜单(以便您可以使用多文件输入) .

其次,将 FastFoodMenu.csv 文件移至该菜单文件夹。 FastFoodMenu.csv 相对路径现在应如下所示:OrderFastFood\menus\FastFoodMenu.csv

第三,从系统属性中获取您的工作目录。这是您的程序正在其中运行的文件夹。然后,获取菜单文件夹的引用(文件对象)。

最后,获取菜单文件夹中相关文件的引用。当您进行多文件读取(并且在某些时候,多文件夹读取)时,您会希望将菜单文件夹中的文件作为列表获取,这就是为什么我说只获取菜单文件夹本身引用(或者只是获取没有对父级的独立引用的文件,即“\menus\”)。

所以你的代码应该看起来像这样:

public void getMenu() {
    final File workingDir = File(System.getProperty("user.dir"));
    final File menusDir = File(workingDir, "menus");
    final File fastFoodMenu = File(menusDir, "FastFoodMenu.csv");

    try {
        final FileInputStream fis = new FileInputStream(fastFoodMenu);
        final BufferedInputStream bs = new BufferedInputStream(fis);
        while((l = bs.readLine()) != null) {
            System.out.println(l);
        }
    } catch(FileNotFoundException e) {
        System.out.println(e.getMessage());
        e.printStackTrace()
    }
}

这都是伪代码,但至少应该让您开始。确保使用 BufferedInputStream 提高效率,并且在读取文件时,始终将它们传递到 FileInputStream 中。它比使用 Scanner 类要好得多。我还应该提到,在创建 File 对象时,您实际上并没有创建文件。您正在做的是创建一个对象,为其提供您希望它拥有的数据(例如它是否是一个文件夹,如果是,您希望它拥有哪些子文件/文件夹,它是否 protected )在实际告诉系统使用其他所有内容创建文件之前,是否隐藏,是否隐藏等)。

关于java - 尝试创建新文件会抛出 FileNotFoundException 但文件存在于同一包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52421399/

相关文章:

java - 如何从 MySQL JDBC 驱动程序获取客户端本地套接字端口?

java - 禁用 JAVA 上的按钮,但保留唯一的按钮

file - 某些行(虚线)使用 Groovy(Grails) 写入文件失败

java - 使用 Java 测试文件损坏和损坏

file - Grails:在引导期间将文件从 grails-app 复制到 web-app 目录

java - 当java程序使用FileOutputStream写入文件时,同时粘贴文件,抛出FileNotFoundException

java - App Engine 不生成复合索引

java - 如何从测试类访问私有(private)方法

Linux 文件实用程序 magic.mgc 数据库获取内容

java - 获取 FileNotFoundException