【问题标题】:Jave FIle Not Found未找到 Java 文件
【发布时间】:2014-01-26 08:51:22
【问题描述】:

我有以下代码用于使用 Apache POI 读取 Java 中的 excel 表。虽然文件存在,但为什么给我一个 FileNotFound Exception?

import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.FileInputStream;
import java.io.File;


    public class ReadFromExcel {

        public static void main(String[] args) {

            FileInputStream file = new FileInputStream(new File("C:\\Personal\\test.xlsx"));

        }
    }

我刚刚从 Windows 资源管理器复制并粘贴了文件位置,因此我知道该文件确实存在。那为什么Java找不到呢?

使用与“File”类而不是“FileInputStream”相同的路径,它工作正常。 FileInputStream 类中的路径有什么特别之处?

【问题讨论】:

  • 尝试把你的文件放到另一个目录然后访问它...
  • 还要仔细检查文件是否被任何其他进程(例如 Excel 本身)打开。在以下情况下会引发该异常 - 如果文件不存在,是目录而不是常规文件,或者由于某些其他原因无法打开以进行读取。
  • 可能是它无权读取该文件或尝试将// 替换为System.getProperty("path.saperator");
  • @cox 此路径不是相对路径,绝对路径在 Java 中有效。 FileInputStream 没有任何方法,例如“fromURL”。你到底在说什么?
  • 以后,请复制并粘贴准确的错误信息!!!!!!您的帖子听起来像是运行时错误(FileInputStream 无法打开“C:\Personal\test.xlsx”)。您的解决方案意味着它实际上是一个编译错误!两种完全不同的东西;两种完全不同的解决方案。请 - 将来,请始终发布 EXACT 错误。

标签: java exception file-io


【解决方案1】:

试试这个代码:

import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileNotFoundException;


public class ReadFromExcel {

    public static void main(String[] args) throws FileNotFoundException {
        File f=new File("C:"+File.separator+"Personal"+File.separator+"test.xlsx");
        FileInputStream file=null;
        if(f.exists()) {
            file = new FileInputStream(f);
            //rest of code
        } else{
            System.out.println("The file does not exist!Please enter correct filename!");
        }
    }
}

我有 3 件事要指出:

  1. 首先,您没有添加 try/catch 块。我的 IDE 根本不让它编译!
  2. 如果您使用文件路径,则更推荐使用 File.separator 而不是使用“\”或“/”,因为它们取决于操作系统。它们使您的代码更具可移植性。
  3. 使用f.exists() 检查文件是否存在会让您知道您尝试作为参数传递给 FileInputStream 的文件是否存在。 当然会有所帮助!

【讨论】:

  • 很多 rahulserver。我添加了例外。这解决了我的问题。我正在使用 netbeans IDE。
  • 干杯!你也可以用 try/catch 块包围它。
【解决方案2】:

可能前两个'\'只代表一个'\',所以你可以使用文件路径为“C:\\Personal\test.xlsx”

【讨论】:

  • 对不起,文件路径是“C:\\\\Personal\\test.xlsx”
【解决方案3】:

建议:拨打File.canRead()看你是否有权限打开文件。

Java new File() says FileNotFoundException but file exists

在三种情况下可能会抛出 FileNotFoundException。

  1. 指定的文件不存在。
  2. 命名文件实际上是一个目录。
  3. 由于某种原因,无法打开指定文件进行读取。

【讨论】:

  • 如果我使用 File 类而不是 FileInputStream,那么 file.canRead() 会给出 true。由于它不适用于 FileInputStream 我无法对其进行测试。感谢您的反馈。
  • 另一个提示:对于 Windows,您还可以使用正斜杠:new File("C:/Personal/test.xlsx");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多