Java I/O深入学习之输入和输出攻略
Java I/O(Input/Output)是 Java 语言标准库的一部分,被设计为灵活和通用的系统,用于读取和写入各种不同类型的数据,包括文件和网络连接等。本文将深入探讨 Java I/O 的输入输出流,包括常见的字节流和字符流及其使用方法。
字节流和字符流
Java I/O 基本上可以分为两种类型: 字节流和字符流。字节流以 byte
为单位进行 I/O 操作,而字符流以 char
为单位进行 I/O 操作。一般情况下,字节流是基于二进制对象进行操作,并一次读取一定数量的数据;而字符流则更适合读取字符数据,并一次读取一个字符(或字符串)。下面将分别讨论字节流和字符流的使用方法。
字节流
Java I/O 提供了两种不同类型的字节流:InputStream 和 OutputStream。众所周知,最基本的 InputStream 和 OutputStream 类型时 FileInputStream 和 FileOutputStream 类型。
InputStream 的基本用法
InputStream 是所有输入流类的抽象类,并提供了一些抽象方法以及一些默认实现方法。InputStream 中最常见的方法时 read() 方法,它用于读取单个字节或者一组字节。为了更方便地读取数据,Java I/O 还提供了缓冲流和数据流的方式。
下面是一个使用 FileInputStream 和 BufferedInputStream 的例子:
import java.io.*;
public class InputStreamDemo {
public static void main(String[] args) throws IOException {
// 创建输入流
FileInputStream fileInputStream = new FileInputStream("hello.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
// 读取数据
byte[] bytes = new byte[1024];
int len;
while ((len = bufferedInputStream.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
// 关闭输入流
bufferedInputStream.close();
fileInputStream.close();
}
}
在上面的示例代码中,我们首先创建了一个 FileInputStream 流和一个 BufferedInputStream 流,用于读取 "hello.txt" 文件中的数据。在读取数据的过程中,我们使用了缓冲流的方式,这样可以提高数据读取的效率。最后,在处理完数据后,我们需要手动关闭输入流。
OutputStream 的基本用法
OutputStream 是所有输出流类的抽象类,并提供了一些抽象方法以及一些默认实现方法。OutputStream 中最常见的方法时 write(byte[] b) 方法,它用于将字节数组 b 写入到输出流。为了更方面的写入数据,Java I/O 还提供了缓冲流的方式。
下面是一个使用 FileOutputStream 和 BufferedOutputStream 的例子:
import java.io.*;
public class OutputStreamDemo {
public static void main(String[] args) throws IOException {
// 创建输出流
FileOutputStream fileOutputStream = new FileOutputStream("hello.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
// 写入数据
byte[] bytes = "hello,world".getBytes();
bufferedOutputStream.write(bytes, 0, bytes.length);
bufferedOutputStream.flush();
// 关闭输出流
bufferedOutputStream.close();
fileOutputStream.close();
}
}
在上面的示例代码中,我们首先创建了一个 FileOutputStream 流和一个 BufferedOutputStream 流,用于写入数据到 "hello.txt" 文件中。在写入数据的时候,我们使用了缓冲流的方式,这样可以提高数据写入的效率。最后,在处理完数据后,我们需要手动关闭输出流。
字符流
Java I/O 提供了两种不同类型的字符流:Reader 和 Writer。众所周知,最基本的 Reader 和 Writer 类型是 FileReader 和 FileWriter 类型。
Reader 的基本用法
Reader 是所有字符输入流的抽象类,并提供了一些抽象方法以及一些默认实现方法。Reader 中最常见的方法时 read(char[] cbuf) 方法,它用于读取一定数量的字符到字符数组 cbuf 中。为了更方便地读取数据,Java I/O 还提供了缓冲流和数据流的方式。
下面是一个使用 FileReader 和 BufferedReader 的例子:
import java.io.*;
public class FileReaderDemo {
public static void main(String[] args) throws IOException {
// 创建输入流
FileReader fileReader = new FileReader("hello.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
// 读取数据
char[] chars = new char[1024];
int len;
while ((len = bufferedReader.read(chars)) != -1) {
System.out.println(new String(chars, 0, len));
}
// 关闭输入流
bufferedReader.close();
fileReader.close();
}
}
在上面的示例代码中,我们首先创建了一个 FileReader 流和一个 BufferedReader 流,用于读取 "hello.txt" 文件中的数据。在读取数据的过程中,我们使用了缓冲流的方式,这样可以提高数据读取的效率。最后,在处理完数据后,我们需要手动关闭输入流。
Writer 的基本用法
Writer 是所有字符输出流的抽象类,并提供了一些抽象方法以及一些默认实现方法。Writer 中最常见的方法时 write(char[] cbuf) 方法,它用于将字符数组 cbuf 写入到输出流中。为了更方面的写入数据,Java I/O 还提供了缓冲流的方式。
下面是一个使用 FileWriter 和 BufferedWriter 的例子:
import java.io.*;
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
// 创建输出流
FileWriter fileWriter = new FileWriter("hello.txt");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
// 写入数据
char[] chars = "hello,world".toCharArray();
bufferedWriter.write(chars, 0, chars.length);
bufferedWriter.flush();
// 关闭输出流
bufferedWriter.close();
fileWriter.close();
}
}
在上面的示例代码中,我们首先创建了一个 FileWriter 流和一个 BufferedWriter 流,用于写入数据到 "hello.txt" 文件中。在写入数据的时候,我们使用了缓冲流的方式,这样可以提高数据写入的效率。最后,在处理完数据后,我们需要手动关闭输出流。
总结
Java I/O 是 Java 语言重要的组成部分,无论是读取文件还是网络通信,都需要使用到 Java I/O 的相关知识。本文重点讲解了 Java I/O 的输入输出流的使用方法,并提供了多个示例代码。读者可以根据自己的需求选择合适的读取方式,来读取和写入各种不同类型的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaI/O深入学习之输入和输出 - Python技术站