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

我试图使用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)
在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)

根据您在post中粘贴的堆栈跟踪来判断,我猜您没有权限读取该文件。

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

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

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

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

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

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

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