使用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进程。
你可能想确保(按照可能性的顺序):
- 该文件存在。
- 该文件不是目录。
- 您或Java进程有权打开该文件。
- 另一个进程没有锁定文件(可能,因为您可能会收到标准的IOException而不是FileNotFoundException)
我认为您正在执行来自eclipse或任何Java IDE的语句,目标文件也存在于IDE工作区中。 您正在收到错误,因为Eclipse无法读取同一工作区中的目标文件。 您可以从命令提示符运行代码。 它不应该通过任何例外。