学习Java(12)之文件输入输出

Posted So istes immer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习Java(12)之文件输入输出相关的知识,希望对你有一定的参考价值。

1.简介

在Java程序中,对于数据的输入/输出操作以“” (stream) 方式进行
分类
数据流的方向不同:输入流和输出流。(以程序的角度来考虑)
处理数据单位不同:字节流和字符流。
按照功能不同:节点流和处理流

字节流(byte stream): 一个字节(8bit)一个字节读/写
字符流(character stream):一个字符一个字符读/写(具有特定字符编码的数据)

为什么要有字符流
Java中字符是采用Unicode标准,Unicode 编码中,一个英文为一个字节,一个中文为两个字节
如果使用字节流处理中文,如果一次读写一个字符对应的字节数就不会有问题,一旦将一个字符对应的字节分裂开来,就会出现乱码了。为了更方便地处理中文这些字符,Java就推出了字符流。

字节流可以处理一切文件(图像、视频、音频等文件),而字符流只能处理纯文本文件(如TXT文件)

所有的读/写函数都抛出java.io.IOException

2.文件

在Java.io包中,包含了两个文件类,用来记载文件信息
①File类,以顺序的方式访问文件
②RandomAccessFile,以随机的方式访问文件

文件读/写流程
①打开文件流
②条件判断
③读出/写入
④关闭文件流

两种类型文件
FileInputStream/FileOutputStream (字节流)
FileReader/FileWriter (字符流)

例子

import java.io.*;
public class Copy {
    public static void main(String[] args) throws IOException {
        File inputFile   = new File(“original.txt");
        File outputFile = new File(“result.txt");
        FileReader in   = new FileReader(inputFile);
        FileWriter out  = new FileWriter(outputFile);
        int c;
        while ((c = in.read()) != -1)
           out.write(c);
        in.close();
        out.close();
    }
}

3.如何提高文件读写效率

IO的缓冲区的存在就是为了提高效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次

两类缓冲流
针对字节流
java.io.BufferedInputStream类
java.io.BufferedOutputStream类
针对字符流
java.io.BufferedReader类
java.io.BufferedWriter类

例子

FileWriter fw =null;
try {
	fw =new FileWriter("c:\\\\testbuffer.txt");//使用缓冲区必须要与一个流对象相关联
	BufferedWriter bw =new BufferedWriter(fw);
	bw.write("hello world!");
	bw.flush();//使用缓冲区的时候要注意刷新
	bw.write("222jjjjjjjjjjjjjjjjj\\n");//关闭缓冲区的对象,实际上是关闭与它关联的流对象最好放在finally执行
	bw.close();
} catch (IOException e) {
	e.printStackTrace();
}

4.Java对象序列化

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象

序列化:把Java对象转换为字节序列的过程
反序列化:把字节序列恢复为Java对象的过程

以上是关于学习Java(12)之文件输入输出的主要内容,如果未能解决你的问题,请参考以下文章

Java之IO输入输出

片段(Java) | 机试题+算法思路+考点+代码解析 2023

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

Python基础学习代码之文件和输入输出

Java学习笔记之:Java 流

201621123031 《Java程序设计》第12周学习总结