Java IO(Input/Output)是Java中用来处理输入/输出的一套API,它可以帮助我们完成文件读写、网络传输等操作。学习 Java I/O 是 Java 开发者的必修课程。在本篇文章中我们将介绍基础的 Java IO 知识,并通过代码示例来演示它们的使用。
一、Java IO 的基本概念
Java 的 IO 流通常被分为两个大类:字节流和字符流。字节流和字符流的区别在于它们处理的数据单位不同。字节流以字节为单位进行读写操作,而字符流则以字符为单位进行读写操作。
Java IO 里最基本的类是java.io中的 InputStream 和 OutputStream。InputStream 和 OutputStream 是所有字节流的父类,提供了最基本的读写方法。
除了 InputStream 和 OutputStream,Java 还提供了字符流,其基本类是java.io中的 Reader 和 Writer。
二、Java IO 流的分类
Java IO 流分为四大类:字节输入流、字节输出流、字符输入流和字符输出流。四个类都是抽象类,不能直接使用。要实现读写操作需借助其子类类。
1. 字节输入流
字节输入流可以从文件或者其它数据源中读取字节数据,最基本的字节输入流是 InputStream。
try(InputStream inputStream = new FileInputStream("example.txt")) { int data = inputStream.read(); while(data != -1) { System.out.println(data); data inputStream.read(); } } catch(IOException e) { e.printStackTrace(); }
以上代码中,首先通过FileInputStream打开文件example.txt,然后通过read()方法一次一个字节地读取文件内容。当read()方法返回-1时,表示文件已经读取完毕,循环结束。
2. 字节输出流
字节输出流将数据以字节的方式写入文件或其它输出目的地中,最基本的字节输出流是 OutStream。
try(OutputStream outputStream = new FileOutputStream("example.txt")) { byte[] data = "Hello World".getBytes(); outputStream.write(data); } catch(IOException e) { e.printStackTrace(); }
以上代码首先通过FileOutStream打开文件 example.txt,然后将“Hello World”转换为字节数组,并使用write()方法将它们写入文件中。
3. 字符输入流
Java 中的字符流比较常用,最基本的字符输入流是 Reader。
try(Reader reader = new FileReader("example.txt")) { int data = reader.read(); while(data != -1) { System.out.printf("%c", data); data = reader.read(); } } catch(IOException e) { e.printStackTrace(); }
以上代码中,首先使用FileReader打开文件 example.txt,然后通过read()方法一次一个字符地读取文件内容。当read()方法返回-1时,表示文件已经读取完毕,循环结束。
4. 字符输出流
Java 中的字符输出流也比较常用,最基本的字符输出流是 Writer。
try(Writer writer = new FileWriter("example.txt")) { String data = "Hello World"; writer.write(data); } catch(IOException e) { e.printStackTrace(); }
以上代码首先通过FileWrite打开文件 example.txt,然后将“Hello World”写入文件中。
三、Java IO 流的操作
Java IO 流提供了各种不同的方法,可以通过它们实现不同的IO读写操作。
1. 文件操作
Java 的File类提供了访问文件系统的方法,可以对文件和目录进行访问和操作。
File file = new File("example.txt"); if(file.exists()) { System.out.println("文件存在"); } else { System.out.println("文件不存在"); }
以上代码使用Java内置的File对象来检查文件是否存在。如果文件存在,则输出“文件存在”,否则输出“文件不存在”。
2. 缓存操作
缓存操作可以提高IO读写效率。Java IO 中的缓存类有BufferedReader、BufferedWriter、ByteArrayInputStream等。其中,Java 8 中已经提供了NIO类库,NIO类库相比IO类库有更高的效率和更强的扩展性。
try(BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) { String data = null; while((data = reader.readLine()) != null) { System.out.println(data); } } catch(IOException e) { e.printStackTrace(); }
以上代码中,首先使用BufferedReader类对FileReader类进行了包装,生成了一个字符输入流。然后通过readLine()方法逐行读取了文件内容,并输出到控制台上。
3. 字节流操作
字节流操作可以对字节进行操作。Java IO中的字节流有ByteArrayInputStream、ByteArrayOutputStream、FileInputStream等。
try(FileInputStream inputStream = new FileInputStream("example.txt")) { byte[] data = new byte[1024]; int len = 0; while((len = inputStream.read(data)) != -1) { System.out.println(new String(data, 0, len)); } } catch(IOException e) { e.printStackTrace(); }
以上代码首先通过FileInputStream类对文件进行读取操作。然后使用read()方法逐个读取文件内容,数据被缓存到 data 数组中。最后将读取到的数据以字符串方式输出到控制台上。
4. 字符流操作
字符流操作可以对字符进行操作,常用的字符流有FileReader、FileWriter等。
try(FileReader reader = new FileReader("example.txt")) { char[] data = new char[1024]; int len = 0; while((len = reader.read(data)) != -1) { System.out.println(new String(data, 0, len)); } } catch(IOException e) { e.printStackTrace(); }
以上代码首先通过FileReader类对文件进行读取操作。然后使用read()方法逐个读取文件内容,数据被缓存到 data 数组中。最后将读取到的数据以字符串方式输出到控制台上。
四、总结
本文从Java IO 的基本概念、分类、操作等多个方面详细讲解了Java IO的基础知识,并通过代码示例展示了它们的具体使用。希望本文能够帮助读者了解Java IO,并更好地运用Java IO来完成自己的项目。