Java IO API使用详解
概述
Java IO API是用于读写数据的标准API。Java IO库是一个基于流的库,主要利用了Java中的抽象类和接口来完成对文件的读写操作。
在Java IO库中,主要包括以下三种抽象源:
- 字节流
- 字符流
- 以及文件读写流
字节流
字节流是Java IO库中最基本的流,它支持对字节的输入和输出两种操作。
InputStream
InputStream是所有字节输入流的抽象基类。它包含许多方法,如:
int read() throws IOException
int read(byte[] b) throws IOException
int read(byte[] b, int off, int len) throws IOException
void close() throws IOException
其中,第一个read()方法用于读取单个字节。第二个read()方法用于读取多个字节,并将其存储在给定的字节数组中。第三个read()方法与第二个类似,但它允许你选择从数组的哪个位置开始读取,以及读取的字节数。close()方法用于关闭流并释放其相关资源。
下面是一个从文件中读取字节并将其写入到标准输出流的示例:
try (FileInputStream inputStream = new FileInputStream("example.txt")) {
int content;
while ((content = inputStream.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
OutputStream
OutputStream是所有字节输出流的抽象基类。它包含许多方法,如:
void write(int b) throws IOException
void write(byte[] b) throws IOException
void write(byte[] b, int off, int len) throws IOException
void flush() throws IOException
void close() throws IOException
其中,第一个write()方法用于写入单个字节。第二个write()方法用于写入整个字节数组。第三个write()方法与第二个类似,但它允许您从数组的给定位置开始写入。flush()方法用于清空缓冲区并将缓冲数据写入底层流中。close()方法用于关闭流并释放其相关资源。
下面是将字节写入文件的示例:
try (FileOutputStream outputStream = new FileOutputStream("example.txt")) {
String message = "Hello, world!";
byte[] content = message.getBytes();
outputStream.write(content);
} catch (IOException e) {
e.printStackTrace();
}
字符流
字符流用于在字符级别上读取和写入数据。与字节流不同,字符流处理Unicode字符,特别是在国际化方面非常有用。
Reader
Reader是所有字符输入流的抽象基类。它包含许多方法,如:
int read() throws IOException
int read(char[] cbuf) throws IOException
int read(char[] cbuf, int off, int len) throws IOException
void close() throws IOException
其中,第一个read()方法用于读取单个字符。第二个read()方法用于读取多个字符,并将其存储在给定的字符数组中。第三个read()方法与第二个类似,但它允许您选择从数组的哪个位置开始读取,以及读取的字符数。close()方法用于关闭流并释放其相关资源。
下面是从文件中读取字符并将其写入到标准输出流的示例:
try (FileReader fileReader = new FileReader("example.txt")) {
int content;
while ((content = fileReader.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
Writer
Writer是所有字符输出流的抽象基类。它包含许多方法,如:
void write(int c) throws IOException
void write(char[] cbuf) throws IOException
void write(char[] cbuf, int off, int len) throws IOException
void write(String str) throws IOException
void write(String str, int off, int len) throws IOException
void flush() throws IOException
void close() throws IOException
其中,第一个write()方法用于写入单个字符。第二个write()方法用于写入整个字符数组。第三个write()方法与第二个类似,但它允许您从数组的给定位置开始写入。第四个write()方法用于写入字符串。第五个write()方法与第四个类似,但它允许您从字符串的给定位置开始写入并写入给定的字符数。flush()方法用于清空缓冲区并将缓冲数据写入底层流中。close()方法用于关闭流并释放其相关资源。
下面是将字符写入文件的示例:
try (FileWriter fileWriter = new FileWriter("example.txt")) {
String message = "Hello, world!";
fileWriter.write(message);
} catch (IOException e) {
e.printStackTrace();
}
文件读写流
文件读写流是Java IO库中用于读写文件的流。
FileInputStream
FileInputStream用于从文件系统中的文件读取数据。它继承自InputStream类并实现了所有其方法。它还提供了一些自己的方法,如:
FileChannel getChannel()
FileDescriptor getFD()
int available() throws IOException
long skip(long n) throws IOException
其中,getChannel()方法用于获取与该流关联的文件通道。getFD()方法用于获取与此流关联的文件描述符。available()方法用于返回此流中可供读取的字节数。skip()方法用于跳过指定字节数并返回所跳过的字节数。
下面是从文件中读取字节并将其写入到标准输出流的示例:
try (FileInputStream inputStream = new FileInputStream("example.txt")) {
byte[] content = new byte[inputStream.available()];
inputStream.read(content);
String message = new String(content);
System.out.println(message);
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream
FileOutputStream用于将数据写入文件系统中的文件。它继承自OutputStream类并实现了所有其方法。它还提供了一些自己的方法,如:
FileChannel getChannel()
FileDescriptor getFD()
其中,getChannel()方法用于获取与该流关联的文件通道。getFD()方法用于获取与此流关联的文件描述符。
下面是将字节写入文件的示例:
try (FileOutputStream outputStream = new FileOutputStream("example.txt")) {
String message = "Hello, world!";
byte[] content = message.getBytes();
outputStream.write(content);
} catch (IOException e) {
e.printStackTrace();
}
结论
这篇文章涵盖了Java IO API的基本知识。它包括字节流、字符流以及文件读写流。这只是一个简短的介绍,你可以在Java官方文档中找到更完整的信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA IO API使用详解 - Python技术站