JavaIO操作简单笔记

File类

File类只能用于获取文件的一些信息、进行新建、删除、重命名、创建目录操作,不涉及文件的读写操作。

//三种构造方法
File(String filename);
File(String directoryPath, String filename);
File(File f, String filename);

文件读写

文件流根据用途分为字节流和字符流
字节流和字符流的区别:

字节流处理单元为 1 个字节,操作字节和字节数组,主要处理原始二进制数据。
字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串。

字节流

文件字节流

FileInputStream和FileOutputStream是两大基础类

FileInputStream
用于读取诸如图像数据的原始字节流。
下面是一段测试程序

File file = new File("in.txt");
FileInputStream fin = new FileInputStream(file);
byte buffer[] = new byte[100];
int len;
while (true) {
	len = fin.read(buffer);
	if (len == -1) //如果读到文件末尾了,read方法会返回-1
		break;
	System.out.println("len=" + len);
}

in.txt内容为:
输入测试
输出结果为:
len=8
可见FileInputStream每次只读一个字节的数据,由于一个汉字占两个字节,因此四个汉字一共读了8个字节的数据。

FileOutputStream
在这里插入图片描述

随机流(任意流)

RandomAccessFile 可以从文件任意位置进行读写,同时具备读写能力,可以说是JavaIO中功能最丰富的类。

构造方法
RandomAccessFile(String name,String mode);
RandomAccessFile(File file,String mode);
参数mode可选: “r” 或 “rw” 或 “w”

主要方法
seek(long pos) 定位RandomAccessFile流的读写位置
getFilePointer() 获取流的当前读写位置
skipBytes(int n) 跳过n个字节的内容

其余读写方法和其他流类似

数组流

与其他流相比数组流的源是内存,因此数组流在使用完后不用进行close操作,因为java虚拟机可以直接操控内容,不用占用系统资源。

使用方法

ByteArrayInputStream
ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);
public int read(); 向后顺序读一个字节
public int read(byte[] b,int off,int len); 将结果读到b数组中,返回实际读取的字节数

ByteArrayOutputStream
ByteArrayOutputStream();
ByteArrayOutputStream(int size);
public void write(int b); 顺序地向缓冲区写入一个字节
public void write(byte[] b,int off,int len);
public byte[] toByteArray(); 返回输出流写入到缓冲区的全部字节

对象流

ObjectInputStream和ObjectOutputStream类可以将类的实例对象写入文件或进行读取。
能被读写的类要实现Serializable接口。
使用对象流时常会遇到ClassNotFound的异常,我的解决方法是将类打包成jar文件然后再导入工程里。至于为什么会遇到这种问题,我的理解是类位于的包名不同可能也会造成对象流写入的区别。
构造方法

ObjectInputStream objis = new ObjectInputStream(new FileInputStream(file));
ObjectOutputStream objos = new ObjectOutputStream(new FileOutputStream(file));

数据流

DataInputStream和DataOutputStream类提供了可以读写各种基本数据类型的数据的各种方法。
构造方法
DataInputStream(InputStream in)
DataOutputStream(OutnputStream out)
对于writeUTF出现乱码的说明
每次调用writeUTF时会在写入内容的前面增加此次写入的长度(用两个字节表示),因此会引起乱码问题,如果要验证这个问题,可以写入97个字符,再打开文件可以看到开头是一个空格和一个小写a。因此writeUTF建议和readUTF配套使用。

字符流

字符流对应的类较多,需要根据具体的功能选择合适的类。

文件字符流(底层流)

FileReader 和 FileWriter是比较底层的字符流
主要用于从文件中读取字符,根据字符
构造方法
FileReader(String filename);
FileReader(File filename);
FileWriter (String filename);
FileWriter (File filename);

读写方法和字节流差不多,只不过这里采用char数组来保存结果,因为java中char类型占两个字节,采用unicode

缓冲流

BufferedReader和BufferedWriter类
缓冲流和文件字符流在功能上非常的相似,区别在于BufferedReader和BufferedWriter有缓冲区,并且提供了readline的方法来一次读取一行,减少了IO调用的次数,因此效率上会更高。

构造方法
BufferedReader(Reader in); //默认缓冲区大小为8kb
BufferedReader(Reader in, int sz); //指定缓冲区大小(sz字节)
BufferedWriter (Writer out);
BufferedWriter (Writer out, int sz);

额外的方法
在这里插入图片描述

各种流的比较

这里介绍了比较全的流种类
在这里插入图片描述

文件对话框

JFileChooser类可以弹出一个文件选择框,方便选择文件。
这里就介绍一个简单的打开文件用法,其他的用法见API(因为实在太多了)

JFileChooser filechooser = new JFileChooser();
File selectfile;
filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY); // 设置文件选择模式,也可以直接用默认的
int val = filechooser.showOpenDialog(null); // 显示文件选择窗口
if (val == JFileChooser.APPROVE_OPTION) { // 如果文件选择成功了
	selectfile = filechooser.getSelectedFile(); // 调用此方法返回一个File对象的引用
	System.out.println("选择的文件路径为:" + selectfile.getAbsolutePath());
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值