输入输出流
在Java中,输入输出流是处理文件和网络数据传输的基本方式。下面是一些Java中常用的输入输出流:
输入流:
- FileInputStream:用于从文件中读取字节。
- FileReader:用于从文件中读取字符。
- BufferedInputStream:提供了缓冲功能,可以减少磁盘访问次数,提高读取效率。
- BufferedReader:用于从字符输入流中读取文本,提供了缓冲功能。
输出流:
- FileOutputStream:用于向文件中写入字节。
- FileWriter:用于向文件中写入字符。
- BufferedOutputStream:提供了缓冲功能,可以减少磁盘访问次数,提高写入效率。
- BufferedWriter:用于向字符输出流中写入文本,提供了缓冲功能。
以下是一个简单的例子,演示如何使用Java的输入输出流来读取和写入文件:
import java.io.*;
public class FileIOExample {
public static void main(String[] args) {
try {
// 读取文件
FileInputStream fis = new FileInputStream("input.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int bytesRead = bis.read(buffer);
while (bytesRead != -1) {
// 处理读取的数据
System.out.println(new String(buffer, 0, bytesRead));
bytesRead = bis.read(buffer);
}
bis.close();
// 写入文件
FileOutputStream fos = new FileOutputStream("output.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
String output = "Hello, world!";
bos.write(output.getBytes());
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的例子中,我们使用了FileInputStream和FileOutputStream来读取和写入文件,并使用了BufferedInputStream和BufferedOutputStream来提高读取和写入效率。
转换流
Java中的转换流是一种特殊的字符流,用于在字节流和字符流之间进行转换。转换流提供了两种类型的流:
- InputStreamReader:将字节流转换为字符流。
- OutputStreamWriter:将字符流转换为字节流。
这些流可以将字节编码转换为字符编码,或将字符编码转换为字节编码,从而使得我们可以更方便地操作文本文件和网络数据传输。
以下是一个简单的例子,演示如何使用Java的转换流来读取和写入文本文件:
import java.io.*;
public class FileIOExample {
public static void main(String[] args) {
try {
// 读取文件
FileInputStream fis = new FileInputStream("input.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
while (line != null) {
// 处理读取的数据
System.out.println(line);
line = br.readLine();
}
br.close();
// 写入文件
FileOutputStream fos = new FileOutputStream("output.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
String output = "Hello, world!";
bw.write(output);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的例子中,我们使用了InputStreamReader和OutputStreamWriter来转换字节流和字符流,并使用了BufferedReader和BufferedWriter来提高读取和写入效率。注意,在转换流中,需要指定字符编码。在本例中,我们使用了UTF-8编码。
快捷流
Java提供了一些快捷流(也称为高级流或过滤器流),它们可以包装其他输入输出流,提供更便捷的读写操作。以下是一些Java中常用的快捷流:
- DataInputStream / DataOutputStream:提供了读写Java基本类型数据的方法。
- ObjectInputStream / ObjectOutputStream:提供了读写Java对象的方法。
- PrintStream:提供了方便的打印方法,可以将数据输出到文件或控制台。
- Scanner:提供了方便的读取方法,可以从文件或控制台读取数据。
- ZipInputStream / ZipOutputStream:提供了读写压缩文件的方法。
以下是一个简单的例子,演示如何使用Java的快捷流来读取和写入文件:
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class FileIOExample {
public static void main(String[] args) {
try {
// 写入文件
FileOutputStream fos = new FileOutputStream("output.txt");
PrintStream ps = new PrintStream(fos);
ps.println("Hello, world!");
ps.close();
// 读取文件
FileInputStream fis = new FileInputStream("output.txt");
Scanner scanner = new Scanner(fis);
String line = scanner.nextLine();
System.out.println(line);
scanner.close();
// 压缩文件
FileOutputStream fos2 = new FileOutputStream("output.zip");
ZipOutputStream zos = new ZipOutputStream(fos2);
ZipEntry entry = new ZipEntry("output.txt");
zos.putNextEntry(entry);
FileInputStream fis2 = new FileInputStream("output.txt");
byte[] buffer = new byte[1024];
int bytesRead = fis2.read(buffer);
while (bytesRead != -1) {
zos.write(buffer, 0, bytesRead);
bytesRead = fis2.read(buffer);
}
zos.closeEntry();
fis2.close();
zos.close();
// 解压文件
FileInputStream fis3 = new FileInputStream("output.zip");
ZipInputStream zis = new ZipInputStream(fis3);
ZipEntry entry2 = zis.getNextEntry();
FileOutputStream fos3 = new FileOutputStream(entry2.getName());
bytesRead = zis.read(buffer);
while (bytesRead != -1) {
fos3.write(buffer, 0, bytesRead);
bytesRead = zis.read(buffer);
}
fos3.close();
zis.closeEntry();
zis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的例子中,我们使用了PrintStream来写入文本文件,并使用了Scanner来读取文本文件,使用了ZipOutputStream和ZipInputStream来压缩和解压文件。快捷流的使用可以大大简化输入输出操作,提高代码的可读性和可维护性。