Java 中的流

输入输出流

在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中的转换流是一种特殊的字符流,用于在字节流和字符流之间进行转换。转换流提供了两种类型的流:

  1. InputStreamReader:将字节流转换为字符流。
  2. 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来压缩和解压文件。快捷流的使用可以大大简化输入输出操作,提高代码的可读性和可维护性。

猜你喜欢

转载自blog.csdn.net/m0_69057918/article/details/131075216