学习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) | 机试题+算法思路+考点+代码解析 2023
java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段