一道java基础理论题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道java基础理论题相关的知识,希望对你有一定的参考价值。

在J2EE中,利用下列构造函数准备对文件abc.txt操作,但文件abc.txt在当前目录不存在,不会产生运行时错误的是()。a) BufferedReader breader=new BufferedReader(new FileReader("abc.txt"));
b) PrintWriter out = new PrintWriter(new FileWriter(“abc.txt”),true);
c)FileInputStream fin = new FileInputStream(“abc.txt”);
d) OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(“abc.txt”));
参考答案bd
考核知识点
和文件操作有关的类的构造函数
请阐释一下为什么选这两个答案,谢谢。

对于写文件的操作,如果文件不存在,则会自动创建。
如PrintWriter out = new PrintWriter(new FileWriter(“abc.txt”),true);的解释:

public FileWriter(File file)
throws IOException

根据给定的 File 对象构造一个 FileWriter 对象。
抛出:
IOException -
如果指定文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它。
所以文件不存在,可以创建的情况下,是不会报错的。

如OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(“abc.txt”));的解释:
public FileOutputStream(String name)
throws FileNotFoundException

创建一个向具有指定名称的文件中写入数据的输出文件流。创建一个新 FileDescriptor 对象来表示此文件连接。
抛出:
FileNotFoundException
- 如果文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它 。
所以文件不存在,可以创建的情况下,是不会报错的。

对于读文件的操作,如果文件不存在,则会报异常。
如BufferedReader breader=new BufferedReader(new FileReader("abc.txt"));的解释:
public FileReader(String fileName)
throws FileNotFoundException

在给定从中读取数据的文件名的情况下创建一个新 FileReader。
抛出:
FileNotFoundException
- 如果指定文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。
所以文件不存在,是会报错的。

如FileInputStream fin = new FileInputStream(“abc.txt”);的解释:
public FileInputStream(String name)
throws FileNotFoundException

通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。创建一个新 FileDescriptor 对象来表示此文件连接。
抛出:
FileNotFoundException - 如果该文件不存在,或者它是一个目录,而不是一个常规文件,抑或因为其他某些原因而无法打开进行读取。
所以文件不存在,是会报错的。

所以最后答案是bd
参考技术A 这最简单的原因就是,ac两个是输入流(或间接使用了输入流),也就是说,他们要从文件中读取内容,如果文件不存在,就会抛出FileNotFoundException。
但是bd两个是输出流(或者说是间接使用输出流),就是往文件里面写东西的。如果文件不存在,就会创建,不会有异常产生。
参考技术B 这个看下源码就知道了:

a、BufferedReader是FileReader的包装类,FileReader是FileInputStream的包装类,FileReader在构造函数调用调用FileInputStream的构造函数,FileInputStream的构造函数中调用了open(name)的native方法来读文件,当文件不存在时,就会报FileNotFound的错。
b、PrintWriter是FileWriter的包装类,FileWriter是FileOutputStream的包装类,FileWriter调用FileOutputStream的构造方法,只检查给定的路径的读写权限,严格意义上它也是会出错的,当没有权限操作时它也会出错的,默认情况下对当前目录操作是具有权限的。

c、FileInputStream的构造函数中调用了open(name)的native方法来读文件,当文件不存在时,就会报FileNotFound的错。
d、FileOutputStream的构造方法,只检查给定的路径的读写权限,严格意义上它也是会出错的,当没有权限操作时它也会出错的,默认情况下对当前目录操作是具有权限的。追问

源码是怎么看的。

追答

你安装完JDK后,在安装目录下面有src.zip,这里面就是源码。

参考技术C ac是把文件abc.txt的内容读入内存,既然没有这个文件当然会抛出异常,bd是把内存中的内容写入到abc.txt中,如果文件不存在就创建了。你看看帮组文档就可以了。 参考技术D bd是向外输出的,当没有发现同名称的文件时,则自动创建一个,所以不会出错,但输入流不行了,必需要有这个文件才能进行输入,不然就会报异常

以上是关于一道java基础理论题的主要内容,如果未能解决你的问题,请参考以下文章

一道java基础面试题

Java基础中的一道面试题

✨Java基础每天一道基础题+面试题——Day01✨

✨Java基础每天一道基础题+面试题——Day01✨

✨Java基础每天一道Java基础+面试题——Day02✨

✨Java基础每天一道Java基础+面试题——Day02✨