6

我正在尝试使用 File 对象初始化 FileInputStream 对象。我在线上收到 FileNotFound 错误

fis = new FileInputStream(file);

这很奇怪,因为我已经通过相同的方法多次打开这个文件来执行正则表达式。

我的方法如下:

private BufferedInputStream fileToBIS(File file){

    FileInputStream fis = null;
    BufferedInputStream bis =null; 
    try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    return bis;
}

java.io.FileNotFoundException: C:\dev\server\tomcat6\webapps\sample-site (Access is denied)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(Unknown Source)
    at java .io.FileInputStream.(Unknown Source)
    at controller.ScanEditRegions.fileToBIS(ScanEditRegions.java:52)
    at controller.ScanEditRegions.tidyHTML(ScanEditRegions.java:38)
    at controller.ScanEditRegions.process(ScanEditRegions.java:64)
    在控制器.ScanEditRegions.visitAllDirsAndFiles(ScanEditRegions.java:148)
    在 controller.Manager.main(Manager.java:10)

4

4 回答 4

10

从您粘贴在帖子中的堆栈跟踪来看,我猜您无权读取该文件。

File 类允许您对文件执行有用的检查,其中一些:

boolean canExecute();
boolean canRead();
boolean canWrite();
boolean exists();
boolean isFile();
boolean isDirectory();

例如,您可以检查:exists() && isFile() && canRead() 并根据您无法读取文件的原因打印更好的错误消息。

于 2009-06-16T06:11:45.120 回答
4

您可能需要确保(按可能性顺序):

  1. 该文件存在。
  2. 该文件不是目录。
  3. 您或 Java 进程有权打开该文件。
  4. 另一个进程没有锁定文件(很可能,因为您可能会收到标准 IOException 而不是 FileNotFoundException)
于 2009-06-16T06:04:07.107 回答
3

这与操作系统中的文件权限设置有关。您已经以对特定目录没有访问权限的用户身份启动了 java 进程。

于 2009-06-16T05:59:12.370 回答
-1

我认为您正在执行来自 eclipse 或任何 java IDE 的语句,并且目标文件也存在于 IDE 工作区中。由于 Eclipse 无法读取同一工作区中的目标文件,您会收到错误消息。您可以从命令提示符运行您的代码。它不应该通过任何异常。

于 2012-03-24T15:34:53.477 回答