Java IO

Java IO

File类

文件类,代表物理文件或目录

创建文件对象,通过文件对象的方法,可以操作文件或目录的属性(路径、权限、日期和时间等)

File类常用方法

在这里插入图片描述

动态的概念,是一连串连续动态的数据集合

分类

按流向分类:

输入流:OutputStream 和 Writer 作为基类

输出流:InputStream 和 Reader 作为基类

输入输出流是相对于计算机内存来说的,而不是相对于源和目标

按处理数据单元分:

字节流:

​ 字节输入流:OutputStream

​ 字节输出流:InputStream

字符流:

​ 字符输入流:Writer

​ 字符输出流:Reader

字节流是 8 位通用字节流,字符流是 16 位 Unicode 字符流

按功能分:

节点流:可以直接从数据源或目的地读写数据。
处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能

文件的读写

文本文件的读写

– 用FileInputStream和FileOutputStream读写文本文件

– 用BufferedReader和BufferedWriter读写文本文件

二进制文件的读写

– 使用DataInputStream和DataOutputStream读写二进制文件以及基本数据类型数据的读写

对象的读写

– 使用ObjectInputStream和ObjectOutputStream读写对象(序列化与反序列化)

字节流读写文件

//使用FileInputStream 读文本文件
import java.io.IOException;
import java.io.FileInputStream;

FileInputStream fis= new FileInputStream(“c:\\test.txt");
int len=0;
While((len=fis.read())!=-1){
...
}
fis.close();

InputStream类常用方法
int read( )
int read(byte[] b)
int read(byte[] b,int off,int len)
void close( )
int available()

子类FileInputStream常用的构造方法
FileInputStream(File file)
FileInputStream(String name)

//使用FileOutputStream 写文本文件
import java.io.IOException;
import java.io.FileOutputStream;
FileOutputStream fos = new FileOutputStream("c:\\test.txt");
String str =“HelloWorld";
byte[] words = str.getBytes();
fos.write(words, 0, words.length);
fos.close();

OutputStream类常用方法
void write(int c)
void write(byte[] buf)
void write(byte[] b,int off,int len)
void close( )

子类FileOutputStream常用的构造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)

1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容
2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

字符流读写文件

//FileReader
import java.io.Reader;
import java.io.FileReader;
import java.io.IOException;
... ...
//创建 FileReader对象对象
Reader fr=null;
StringBuffer sbf=null;
try {
	fr = new FileReader("D:\\myDoc\\test.txt");
	char ch[]=new char[1024]; //创建字符数组作为中转站
	sbf=new StringBuffer();
	int length=fr.read(ch); //将字符读入数组
	while ((length!= -1)) {//循环读取并追加字符
		sbf.append(ch); //追加到字符串
		length=fr.read();
	}
}
... ...
fr.close();
//BufferedReader 使用缓冲区,提高效率
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

Reader fr = new FileReader("C:\\myTest.txt ");
BufferedReader br = new BufferedReader(fr);
br.readLine();

br.close();
fr.close();

Reader类常用方法
int read( )
int read(byte[] c)
read(char[] c,int off,int len)
void close( )

子类BufferedReader常用的构造方法
BufferedReader(Reader in)
子类BufferedReader特有的方法
readLine()

//使用FileWriter写文件
import java.io.Reader;
import java.io.FileWriter;
import java.io.IOException;
... ...
Writer fw = null;
try {
	//创建一个FileWriter对象
	fw = new FileWriter("D:\\myDoc\\111.txt");
	//写入信息
	fw.write("hello world!");
	fw.flush(); //刷新缓冲区
}catch(IOException e){
	System.out.println("文件不存在!");
}
… …
fw.close(); //关闭流
… …
//使用 BufferedWriter 写文件
import java.io.FileWriter ;
import java.io.BufferedWriter ;
import java.io.IOException;

FileWriter fw = new FileWriter("C:\\myTest.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("hello");

bw.flush();
fw.close();

Writer类常用方法
write(String str)
write(String str,int off,int len)
void close()
void flush()

子类BufferedWriter常用的构造方法
BufferedReader(Writer out)

小结

流操作的基本规律
1、明确源和目的

a)源:输入流 InputStream Reader
b)目的:输出流 OutputStream Writer

2、操作的数据是否是纯文本

是:字符流 Reader,Writer
不是:字节流 InputStream,OutputStream

3、具体的操作设备

源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台

操作对象的流

操作对象的流

​ 序列化对象:ObjectOutputStream

​ 反序列化对象:ObjectInputStream

序列化:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));
oos.writeObject(new Person("张三",19));// 序列化
oos.close();

反序列化

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
Person p=(Person)ois.readObject();//反序列化
System.out.println(p);

注意
1、类必须实现Serializable接口
2、给类加个序列化编号,给类定义一个标记,新的修改后的类还可以操作曾经序列化的对象
3、静态是不能被序列化的,序列化只能对堆中的进行序列化 ,不能对“方法区”中的进行序列化
4、不需要序列化的字段前加 transient

操作基本数据的流

//写入数据
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeInt(234);
dos.writeBoolean(false);
dos.writeDouble(9943.00);
dos.writeUTF("中国");
dos.close();
//读取数据
DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
int num=dis.readInt();
boolean isFind=dis.readBoolean();
double price=dis.readDouble();
String str=dis.readUTF();
System.out.println(num+"\t"+isFind+"\t"+price+"\t"+str)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值