Java知识 – I/O流

%} Java的IO流是用于在程序中读写数据的工具,可以让程序从文件、网络、控制台等多种来源读取数据并将数据写入不同的目标。

想象一下,你在漂流瓶里写下一封信,然后将瓶子扔进大海。这个漂流瓶就是一个输入流,因为它将数据(你写下的信)输入到大海中。另一方面,如果你发了一封电子邮件,那么这个过程就是一个输出流,因为你的电子邮件程序将数据从你的电脑输出到互联网上。

Java提供了几种不同类型的IO流,包括字节流和字符流。字节流以字节为单位读写数据,适用于处理二进制数据(如图像或音频文件)。而字符流则以字符为单位读写数据,适用于处理文本数据(如读写文本文件)。

%} 以下是一个使用IO流来复制文件的例子:(ノ◕ヮ◕)ノ*:・゚✧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopier {
public static void main(String[] args) {
try (FileInputStream inputStream = new FileInputStream("source.txt");
FileOutputStream outputStream = new FileOutputStream("target.txt")) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
System.out.println("文件复制成功 (ノ◕ヮ◕)ノ*:・゚✧");
} catch (IOException e) {
System.err.println("文件复制失败 ╯︿╰");
e.printStackTrace();
}
}
}

%} 现在,让我们来看一下一个简单的使用字符流来读取文件的例子:(ノ◕ヮ◕)ノ*:・゚✧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("example.txt")) {
int c;
while ((c = reader.read()) != -1) {
System.out.print((char) c);
}
} catch (IOException e) {
System.err.println("文件读取失败 ╯︿╰");
e.printStackTrace();
}
}
}

上面这个例子中,我们使用了FileReader类来打开一个文本文件,并使用read()方法读取文件中的字符。当我们读取到文件末尾时,read()方法会返回-1,循环就结束了。同时,我们还使用了try-with-resources语句来自动关闭文件流,这样可以确保文件在读取完成后被正确地关闭,以避免资源泄漏。

%} 然后是一个写入文件的例子:(ノ◕ヮ◕)ノ*:・゚✧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterExample {
public static void main(String[] args) {
File file = new File("example.txt");

try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
writer.write("Hello, Java I/O! (ノ◕ヮ◕)ノ*:・゚✧\n");
writer.write("Let's write something to a file!\n");
writer.write("I am enjoying writing to a file!\n");
} catch (IOException e) {
System.err.println("文件写入失败 ╯︿╰");
e.printStackTrace();
}
}
}

在这个例子中,我们创建了一个File对象,指定了要写入的文件名。接着,我们使用FileWriter类来创建一个写入文件的Writer对象,并将其包装在一个BufferedWriter对象中以提高写入性能。然后,我们使用write()方法来将数据写入到文件中。在完成写入后,我们需要关闭文件流。

在实际应用中,我们可能会遇到需要将一段字符串或数据写入文件的情况。这时,我们可以使用PrintWriterFileOutputStream等类来进行文件写入操作。需要注意的是,在进行文件写入操作时,我们需要确保文件流被正确地关闭,以避免资源泄漏。

%} 总地来说٩(๑>◡<๑)۶

Java的I/O流可以分为两种类型:字节流和字符流。字节流以字节为单位读写数据,适用于处理二进制数据;而字符流以字符为单位读写数据,适用于处理文本数据。常见的I/O流类有:InputStreamOutputStream、ReaderWriter。其中,InputStreamOutputStream是字节流,ReaderWriter是字符流。

Java的I/O流还可以根据读写方向分为输入流和输出流。输入流是用于读取数据的流,而输出流是用于写入数据的流。在Java中,我们使用java.io包中的类来实现I/O流的读写操作。同时,为了防止资源泄漏,我们需要在读写操作完成后显式地关闭文件流。

为了方便处理文件流的关闭,我们可以使用try-with-resources语句块,这样可以自动关闭文件流。如果你需要读取或写入大量的数据,你可以使用缓冲流来提高读写性能。

除了文件I/O之外,Java还支持网络I/O。Java的网络I/O主要用于建立与其他计算机的通信连接,以实现网络通信。常见的网络I/O类有:SocketServerSocketDatagramSocket等。通过这些类,我们可以在Java程序中实现TCPUDP等网络协议的通信。