在我们日常的开发中使用最多的Java知识点就是Java的IO流和Java集合两大模块,后续的文章我会接着介绍Java集合的知识,本篇博文我主要讲解Java的输入流和输出流。
我们知道任何的编程语言,首先要解决的就是如何与外部介质交换数据,这就包括了如何将数据写到外部介质以及如何读取外部介质的数据;Java的I/O流提供了读写数据的标准方法,Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。
Java的I/O流按读写方式可以分为字节流和字符流两种类型;其实字符流的本质还是字节流,只不过字符流对字节流做了一次封装。需要注意的是:当我们读写二进制文件时(如:图片、视频、音频等),只能使用字节流,否则会操作失败。
按照读写介质的不同,对于I/O流我们还有另一种划分方法,分别是面向显示器、键盘的操作、面向内存的操作、面向磁盘的操作以及面向网络的操作。
输入流、输出流中的输入和输出均是相对于Java程序来说,输入即是向程序输入数据(读),输出即是程序向外部输出数据(写)。
I/O流的相关类如下图所示:
结合我自身开发的经验,我认为按照读写介质来讲解理解会更加直观,所以下面我会按照不同的读写介质来讲解I/O流。
1、面向显示器、键盘的读写操作(标准输入、输出)
面向显示器的写操作和面向键盘的读操作,就是我们常用的System.out和System.in;使用System.out可以向我们的显示器输出信息,使用System.in可以从我们的键盘获取信息,示例代码如下:/**
* 标准输入输出
*/
public class SystemIOTest {
public static void main(String[] args) throws Exception{
System.out.println("请输入姓名:");
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextLine());
}
}
2、面向磁盘的读写操作
面向磁盘的读写操作,主要就是指对文件的读写操作,它主要包括FileInputStream、FileOutputStream、FileReader、FileWriter,示例代码如下:/**
* java io 测试类
*/
public class JavaIOTest {
/**
* 字节流读取二进制文件(如图片、音乐文件)
*/
@Test
public void inputstreamPicTest() {
try {
InputStream inputStream = new FileInputStream("e:" + File.separator + "logo.png");
OutputStream outputStream = new FileOutputStream("e:" + File.separator + "copy.png");
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) != -