掌握Java中的IO函数,实现文件和流的读写操作
Java是一门非常流行的编程语言,它提供了多种IO函数来实现文件和流的读写操作。在Java中,IO操作主要涉及三个层次:字节流、字符流和缓冲流。下面我们将逐一介绍这三个层次的IO函数,并通过示例代码来演示其使用方法。
一、字节流
字节流是Java IO中最基本的一种IO方式,其输入和输出操作的单位都是单个字节。常见的字节流有InputStream和OutputStream两个类。
1.1 InputStream类
InputStream类是Java IO中最基本的抽象类之一,它是所有字节输入流的基类。InputStream类提供了多种方法来从输入流中读取字节数据,例如read()、read(byte[] b)和read(byte[] b, int off, int len)等方法。这些方法通常被用来从文件、网络、socket和管道等数据源读取字节数据。
下面是一个从文件中读取数据的示例代码:
try {
InputStream inputStream = new FileInputStream("test.txt");
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
1.2 OutputStream类
OutputStream类是Java IO中最基本的抽象类之一,它是所有字节输出流的基类。OutputStream类提供了多种方法来向输出流中写入字节数据,例如write(int b)、write(byte[] b)和write(byte[] b, int off, int len)等方法。这些方法通常被用来将字节数据写入到文件、网络、socket和管道等数据源。
下面是一个向文件中写入数据的示例代码:
try {
OutputStream outputStream = new FileOutputStream("test.txt");
outputStream.write("Hello, world!".getBytes());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
二、字符流
字符流是Java IO中高级一些的IO方式,其输入和输出操作的单位是单个字符,通常是Unicode字符集编码。常见的字符流有Reader和Writer两个类。
2.1 Reader类
Reader类是Java IO中所有字符输入流的抽象类,它提供了多种方法来从输入流中读取字符数据,例如read()、read(char[] cbuf)和read(char[] cbuf, int off, int len)等方法。这些方法通常被用来从文件、网络、socket和管道等数据源读取字符数据。
下面是一个从文件中读取数据的示例代码:
try {
Reader reader = new FileReader("test.txt");
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
2.2 Writer类
Writer类是Java IO中所有字符输出流的抽象类,它提供了多种方法来向输出流中写入字符数据,例如write(int c)、write(char[] cbuf)和write(char[] cbuf, int off, int len)等方法。这些方法通常被用来将字符数据写入到文件、网络、socket和管道等数据源。
下面是一个向文件中写入数据的示例代码:
try {
Writer writer = new FileWriter("test.txt");
writer.write("Hello, world!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
三、缓冲流
缓冲流是Java IO中比较实用的一种IO方式,它可以提高IO操作的效率。缓冲流分为字节缓冲流和字符缓冲流,常见的缓冲流有BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter四个类。
3.1 BufferedInputStream类
BufferedInputStream类是InputStream类的子类,它提供了缓冲读取字节流的能力,因此在读取大型文件时,使用BufferedInputStream可以提高读取效率。
下面是一个从文件中读取数据的示例代码:
try {
InputStream inputStream = new FileInputStream("test.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int data;
while ((data = bufferedInputStream.read()) != -1) {
System.out.print((char) data);
}
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
3.2 BufferedOutputStream类
BufferedOutputStream类是OutputStream类的子类,它提供了缓冲写入字节流的能力,因此在写入大型文件时,使用BufferedOutputStream可以提高写入效率。
下面是一个向文件中写入数据的示例代码:
try {
OutputStream outputStream = new FileOutputStream("test.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
bufferedOutputStream.write("Hello, world!".getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
3.3 BufferedReader类
BufferedReader类是Reader类的子类,它提供了缓冲读取字符流的能力,因此在读取大型文件时,使用BufferedReader可以提高读取效率。
下面是一个从文件中读取数据的示例代码:
try {
Reader reader = new FileReader("test.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
3.4 BufferedWriter类
BufferedWriter类是Writer类的子类,它提供了缓冲写入字符流的能力,因此在写入大型文件时,使用BufferedWriter可以提高写入效率。
下面是一个向文件中写入数据的示例代码:
try {
Writer writer = new FileWriter("test.txt");
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write("Hello, world!");
bufferedWriter.newLine();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
综上所述,Java中的IO函数提供了多种方法来实现文件和流的读写操作,包括字节流、字符流和缓冲流三个层次。这些函数的使用方法各不相同,需要根据具体的应用场景进行选择。为了提高IO操作的效率,我们可以使用缓冲流来进行数据缓冲,从而减少IO操作的次数,提高程序的效率。
