欢迎访问宙启技术站
智能推送

掌握Java中的IO函数,实现文件和流的读写操作

发布时间:2023-05-30 07:20:29

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操作的次数,提高程序的效率。