java.io 包下的类有哪些 + 面试题
IO 介绍
IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等。
IO 分类
传统的 IO,按照流类型我们可以分为:
字符流
字节流
其中,字符流包括 Reader、Writer;字节流包括 InputStream、OutputStream。
传统 IO 的类关系图,如下图所示:
IO 使用
了解了 IO 之间的关系,下面我们正式进入实战环节,分别来看字符流(Reader、Writer)和字节流(InputStream、OutputStream)的使用。
① Writer 使用
Writer 可用来写入文件,请参考以下代码:
// 给指定目录下的文件追加信息
Writer writer = new FileWriter("d:\\\\io.txt",true);
writer.append("老王");
writer.close();
这几行简单的代码就可以实现把信息 老王 追加到 d:\\io.txt 的文件下,参数二表示的是覆盖文字还是追加文字。
② Reader 使用
Reader 可用来读取文件,请参考以下代码:
Reader reader = new FileReader("d:\\\\io.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
String str = null;
// 逐行读取信息
while (null != (str = bufferedReader.readLine())) {
System.out.println(str);
}
bufferedReader.close();
reader.close();
③ InputStream 使用
InputStream 可用来读取文件,请参考以下代码:
InputStream inputStream = new FileInputStream(new File("d:\\\\io.txt"));
byte[] bytes = new byte[inputStream.available()];
// 读取到 byte 数组
inputStream.read(bytes);
// 内容转换为字符串
String content = new String(bytes, "UTF-8");
inputStream.close();
④ OutputStream 使用
OutputStream 可用来写入文件,请参考以下代码:
OutputStream outputStream = new FileOutputStream(new File("d:\\\\io.txt"),true);
outputStream.write("老王".getBytes());
outputStream.close();
NIO 介绍
上面讲的内容都是 java.io 包下的知识点,但随着 Java 的不断发展,在 Java 1.4 时新的 IO 包出现了 java.nio,NIO(Non-Blocking IO)的出现解决了传统 IO,也就是我们经常说的 BIO(Blocking IO)同步阻塞的问题,NIO 提供了 Channel、Selector 和 Buffer 等概念,可以实现多路复用和同步非阻塞 IO 操作,从而大大提升了 IO 操作的性能。<