FileReader FileOutputStream FileInputStream
时间: 2023-11-19 09:51:33 浏览: 82
这三个都是Java中用于文件读写的类。其中FileReader是用于读取字符文件的,FileInputStream和FileOutputStream则是用于读写字节文件的。
FileReader继承自InputStreamReader,它的read()方法会读取一个字符并返回,如果已经到达文件末尾,则返回-1。FileReader还有一个read(char[] cbuf, int off, int len)方法,可以一次读取多个字符到指定的字符数组中。
FileInputStream和FileOutputStream则是用于读写字节文件的。FileInputStream的read()方法会读取一个字节并返回,如果已经到达文件末尾,则返回-1。FileOutputStream的write()方法可以将一个字节或者一个字节数组写入到文件中。
相关问题
Avoid instantiating FileInputStream, FileOutputStream, FileReader, or FileWriter
避免直接实例化`FileInputStream`, `FileOutputStream`, `FileReader`, 或 `FileWriter`的原因主要有几个:
1. **资源管理**:这些类都是低级别的文件I/O流,它们没有内置的关闭机制。如果直接创建并忘记关闭,可能会导致资源泄露。应该使用`try-with-resources`语句或手动调用`close()`方法来确保资源在使用完毕后被正确释放。
2. **异常处理**:使用这些类时需要处理可能出现的各种异常,如权限不足、文件不存在等。如果操作不当,程序容易崩溃。
3. **API替代**:Java 7引入了`Files`类和`nio`包,提供更安全、便捷的方式来操作文件,比如`Files.newBufferedReader()`和`Files.newOutputStream()`. 这些方法底层会自动处理打开、读取、写入以及关闭资源。
4. **性能优化**:`java.nio`库通常比传统的I/O API更快,因为它们使用缓冲区减少系统调用次数,并支持并发读写。
因此,推荐使用Java提供的高级API来代替,例如:
```java
try (BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
// process the line
}
} catch (IOException e) {
e.printStackTrace();
}
```
这样做既保证了资源管理,也简化了代码。
JAVA实现字符流写操作的类或接口包括下面的哪些?( ) A. FileReader B. Writer C. FileInputStream D. FileOutputStream E. FileWriter
正确答案是:B、E。
解析:
字符流写操作的类或接口一般都以Writer和OutputStream结尾。
A选项的FileReader是字符流读操作的类,不是写操作的。
C选项的FileInputStream是字节流读操作的类,不是字符流写操作的。
D选项的FileOutputStream是字节流写操作的类,不是字符流写操作的。
因此,只有B和E选项是字符流写操作的类或接口,其中B选项的Writer是抽象类,需要使用其子类完成具体的字符流写操作;E选项的FileWriter则是Writer类的子类,可以直接使用其提供的方法进行字符流写操作。
阅读全文