使用File对象初始化FileInputStream时获取FileNotFoundException

时间:2009-06-16 05:57:24

标签: java filenotfoundexception fileinputstream bufferedinputstream

我正在尝试使用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(访问被拒绝)
在java.io.FileInputStream.open(本机方法)     
在java.io.FileInputStream。(未知来源)     
在java.io.FileInputStream。(未知来源)     
在controller.ScanEditRegions.fileToBIS(ScanEditRegions.java:52)     
在controller.ScanEditRegions.tidyHTML(ScanEditRegions.java:38)     
在controller.ScanEditRegions.process(ScanEditRegions.java:64)     
在controller.ScanEditRegions.visitAllDirsAndFiles(ScanEditRegions.java:148)     
在controller.Manager.main(Manager.java:10)

4 个答案:

答案 0 :(得分:9)

根据您在帖子中粘贴的堆栈跟踪判断,我猜您无权读取该文件。

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

你可能想要确保(按照可能性的顺序):

  1. 文件存在。
  2. 该文件不是目录。
  3. 您或Java进程有权打开该文件。
  4. 另一个进程没有锁定文件(可能,因为您可能会收到标准的IOException而不是FileNotFoundException)

答案 3 :(得分:-1)

我认为您正在执行来自eclipse或任何Java IDE的语句,目标文件也存在于IDE工作区中。您正在获取错误,因为Eclipse无法在同一工作区中读取目标文件。您可以从命令提示符运行代码。它不应该是任何例外。