import java.io.*;public class niu
{
public static void main(String[] args)
{
String path="e:/insert.c";
File fs=new File(path);
System.out.println(fs.getName());//正常输出insert.c
FileInputStream fis = new FileInputStream(fs);//为什么此处会抛出异常java.io.FileNotFoundException
}
}直接 FileInputStream fis = new FileInputStream("e:/insert.c");也会抛出文件未找到异常,求解释。。
FileNotFoundException - 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。 其他原因无法读取?
throws FileNotFoundException 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。创建一个新 FileDescriptor 对象来表示此文件连接。 首先,如果有安全管理器,则用 file 参数表示的路径作为参数调用其 checkRead 方法。 如果指定文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取,则抛出 FileNotFoundException。 参数:
file - 为了进行读取而打开的文件。
抛出:
FileNotFoundException - 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。
SecurityException - 如果存在安全管理器,且其 checkRead 方法拒绝对文件进行读取访问。
另请参见:
File.getPath(), SecurityManager.checkRead(java.lang.String)JDK在定义这个构造器的时候就已经向上抛了FileNotFoundException异常了,而调用它的构造器也必须要抛出异常.仅此而已.如果是在JDK中原本用try{}catch(){}这样定义的异常,就不必再往上抛了..
import java.io.FileInputStream;
import java.io.IOException;public class MyTest {
public static void main(String[] args){
String path="e:\\insert.c";
//String path="e:\\insert.txt";如果.c文件找不到,试一下换成insert.txt
File fs=new File(path);
System.out.println(fs.getName());//正常输出insert.c try{
FileInputStream fis = new FileInputStream(fs);
}catch(IOException e){
e.printStackTrace();
} }}
throws FileNotFoundException这个函数声明的时候,已经说了,他会抛出一个异常,所以你必须catch这个异常。这是语言的一个防御机制。即告诉使用者,这里很有可能会出错。你必须注意。其实即使你测试了文件存在,也有可能测试完的一瞬间这个文件被删除了。
加我QQ帮你看下吧,519582737
jdk 原文是这样的啊FileInputStreampublic FileInputStream(File file)
throws FileNotFoundException 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。创建一个新 FileDescriptor 对象来表示此文件连接。 首先,如果有安全管理器,则用 file 参数表示的路径作为参数调用其 checkRead 方法。 如果指定文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取,则抛出 FileNotFoundException。 参数:
file - 为了进行读取而打开的文件。
抛出:
FileNotFoundException - 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。 不存在才抛出异常啊,不是肯定要抛出的吧,那为什么我加上catch就可以了呢,而且我还能读取文件的内容。
FileInputStream fis = new FileInputStream(fs);提示的错误确实如此,不过为什么和jdk api 文档上说的意思不一样呢?
感谢二位