使用File对象初始化FileInputStream时出现FileNotFoundException错误

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 (访问被拒绝)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(未知来源)
    at java.io.FileInputStream.(未知来源)
    at controller.ScanEditRegions.fileToBIS(ScanEditRegions.java:52)
    at controller.ScanEditRegions.tidyHTML(ScanEditRegions.java:38)
    at controller.ScanEditRegions.process(ScanEditRegions.java:64)
    at controller.ScanEditRegions.visitAllDirsAndFiles(ScanEditRegions.java:148)
    at controller.Manager.main(Manager.java:10)


文件在那里,您是否有权限问题? - Sam Saffron
4个回答

10

根据您发布的堆栈跟踪,我猜测您没有读取文件的权限。

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

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

问题在于一个目录被传递进来了(以及许多文件)。 - Ankur
同样的问题我也遇到了,我的错误是 02-10 14:18:25.367: W/System.err(365): java.io.FileNotFoundException: /storage/emulated/0/bhanuдо_свидания.txt: open failed: ENOENT (No such file or directory) 02-10 14:18:25.367: W/System.err(365): at libcore.io.IoBridge.open(IoBridge.java:409) 02-10 14:18:25.367: W/System.err(365): at java.io.FileInputStream.<init>(FileInputStream.java:78) - Bhanu Sharma

4

为了确保(按可能性顺序):

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

同样的问题也出现在我的电脑上,我的错误信息是02-10 14:18:25.367: W/System.err(365): java.io.FileNotFoundException: /storage/emulated/0/bhanuдо_свидания.txt: open failed: ENOENT (No such file or directory) 02-10 14:18:25.367: W/System.err(365): at libcore.io.IoBridge.open(IoBridge.java:409) 02-10 14:18:25.367: W/System.err(365): at java.io.FileInputStream.<init>(FileInputStream.java:78) - Bhanu Sharma

3

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


-1

我认为你正在从Eclipse或任何Java IDE执行语句,并且目标文件也存在于IDE工作区中。你遇到了错误,因为Eclipse无法读取同一工作区中的目标文件。你可以从命令提示符运行代码。这样就不会抛出任何异常。


原帖的提问者已经接受了一个答案并解释了问题的根本原因——他传递的是一个目录路径而不是文件路径。在回答历史性问题之前,请确保您检查了其他人所写的内容。 - Duncan Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接