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

如何在Java中使用字符流与字节流进行文件IO操作

发布时间:2023-06-12 12:31:17

在Java中,有两种常见的文件IO操作方式:字符流和字节流。字符流适用于读取或写入文本文件,而字节流适用于读取或写入任何类型的文件。

一、字符流

字符流是用于读取或写入文本文件的IO流,在Java中有两个主要的字符流:Reader和Writer。

1. Reader

Reader是用于读取字符流的抽象类,它的常见子类有FileReader、InputStreamReader等。

FileReader用于读取本地磁盘上的文本文件,例如:

try {
    FileReader reader = new FileReader("sample.txt");
    int ch;
    while ((ch = reader.read()) != -1) {
        System.out.print((char) ch);
    }
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}

InputStreamReader用于读取字节流并将其转换为字符流。例如:

try {
    FileInputStream fis = new FileInputStream("sample.txt");
    InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
    int ch;
    while ((ch = isr.read()) != -1) {
        System.out.print((char) ch);
    }
    isr.close();
} catch (IOException e) {
    e.printStackTrace();
}

2. Writer

Writer是用于写入字符流的抽象类,它的常见子类有FileWriter、OutputStreamWriter等。

FileWriter用于向本地磁盘上的文本文件中写入数据,例如:

try {
    FileWriter writer = new FileWriter("sample.txt");
    writer.write("Hello, world!");
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

OutputStreamWriter用于写入字节流,并将其转换为字符流。例如:

try {
    FileOutputStream fos = new FileOutputStream("sample.txt");
    OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
    osw.write("Hello, world!");
    osw.close();
} catch (IOException e) {
    e.printStackTrace();
}

二、字节流

字节流是用于读取或写入任何类型的文件的IO流,在Java中有两个主要的字节流:InputStream和OutputStream。

1. InputStream

InputStream是用于读取字节流的抽象类,它的常见子类有FileInputStream、ByteArrayInputStream等。

FileInputStream用于读取本地磁盘上的文件,例如:

try {
    FileInputStream fis = new FileInputStream("sample.bin");
    int ch;
    while ((ch = fis.read()) != -1) {
        System.out.print(ch + " ");
    }
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}

ByteArrayInputStream用于从内存中读取数据,例如:

try {
    byte[] data = new byte[]{65, 66, 67, 68, 69};
    ByteArrayInputStream bis = new ByteArrayInputStream(data);
    int ch;
    while ((ch = bis.read()) != -1) {
        System.out.print((char) ch + " ");
    }
    bis.close();
} catch (IOException e) {
    e.printStackTrace();
}

2. OutputStream

OutputStream是用于写入字节流的抽象类,它的常见子类有FileOutputStream、ByteArrayOutputStream等。

FileOutputStream用于向本地磁盘上的文件中写入数据,例如:

try {
    FileOutputStream fos = new FileOutputStream("sample.bin");
    byte[] data = new byte[]{65, 66, 67, 68, 69};
    fos.write(data);
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

ByteArrayOutputStream用于将数据写入内存中,例如:

try {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] data = new byte[]{65, 66, 67, 68, 69};
    bos.write(data);
    byte[] result = bos.toByteArray();
    System.out.println(Arrays.toString(result));
    bos.close();
} catch (IOException e) {
    e.printStackTrace();
}

总结:

Java中的文件IO操作涉及到了字符流和字节流两种方式,具体使用哪种方式取决于文件的类型和需要进行的操作类型。上述的代码示例可以帮助开发者们实现文件的读取和写入操作,但是要注意关闭流,否则会引起资源泄露等问题。