java必知必会-java IO

系列文章目录

java必知必会-java环境搭建
java必知必会-java开发工具安装与使用
java必知必会-java关键字、变量和常量
java必知必会-java数据类型和变量定义
java必知必会-java类和对象
java必知必会-java面向对象的三大特性
java必知必会-java继承与重写、重载
java必知必会-java构造方法与访问修饰符
java必知必会-java抽象类与接口
java必知必会-java常见关键字及其作用
java必知必会-java常见关键字及其作用
java必知必会-java常用api
java必知必会-java IO



前言

本文主要介绍io相关类的主要api


一、IO概述

  • IO就是将内存中的数据持久化存储到持久化设备上,使用的时候从持久化设备上读入内存
  • IO操作:当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

二、IO的继承体系

IO.jpg

三、IO相关api

1.java.io.File

Java中把文件或者目录(文件夹)都封装成File对象

  • File(“e:\a\hello.java”);将给定路径名称字符串转换为抽象路径名创建File对象,(包括不存在文件或者文件夹)
  • boolean createNewFile()创建不存在的文件并返回true,存在false
  • boolean mkdir()创建不存在的单层文件夹并返回true,存在false
  • boolean mkdirs()创建多层文件夹
  • boolean delete()删除此抽象路径名表示的文件或空目录
  • boolean isFile()判断此抽象路径名表示的文件是否为标准文件
  • boolean isDirectory()判断此抽象路径名表示的文件是否是目录(文件夹)
  • String getAbsolutePath()获取当前File对象的绝对路径名字符串
  • String getPath()将此抽象路径名转换为一个路径名字符串
  • String getName()获取当前File对象的文件或目录的名称
  • long length()获取当前File对象的文件或文件夹的大小(字节)
  • boolean exists() 判断File对象对应的文件或目录是否存在
  • String[] list()获得抽象路径名目录的文件和目录的字符串数组,指定的目录必须是存在的目录。否则数组为null
  • File[] listFiles()获取抽象路径名目录中的File对象数组,指定的目录必须是存在的目录。否则数组为null
  • File[] listFiles(FilenameFilter filter)返回File的目录中满足过滤器的文件和目录抽象路径名数组
  • File[] listFiles(FileFilter filter)返回File的目录中满足过滤器的文件和目录抽象路径名数组
  • FilenameFilter接口:过滤文件名
  • boolean accept(FIle dir,String name)测试指定路径名是否包含在某个路径列表中中
  • FileFilter接口:过滤文件或者文件夹
  • boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中

2.java.io.OutputStream

抽象类,表示输出字节流的所有类的超类

  • void close()关闭输出流并释放与此流有关的所有系统资源
  • void flush()刷新此输出流并强制写出所有输出字节
  • void write(byte[] b)将b.length个字节从指定的byte数组写入此输出流
  • void write(byte[] b,int off,int len)将制定byte数组从偏移量off开始的len个字节写入此输出流

3. java.io.FlieOutputStream

  • FlieOutputStream(File file)创建Flie对象表示文件中写入数据的输出流(文件存在则覆盖)
  • FlieOutputStream(String name)创建指向指定名称文件中写入数据的输出流(文件存在则覆盖)
  • FileOutputStream(File file,boolean append)true在文件末尾继续添加,“\r\n”换行
  • FlieOutputStream(String name,boolean append)true就表示可以在文件末尾继续添加

4. java.io.ObjectOutputStream

操作对象的流

  • ObjectOutputStream(OutputStream out)传入OutputStream的实现类如FileOutputStream即可
  • void writeObject(Object obj)将指定对象写入ObjectOutputStream
  • ①被序列化的对象所属的类必须实现Serializable接口。否则会发生异常NotSerializableException异常。
  • ②反序列化对象时,如果对象所属的class文件在序列化之后被修改了,那么会发生异常InvalidClassException。
  • Serializable标记接口,给需要序列化的类,提供了一个序列版本号serialVersionUID. private static final long serialVersionUID = 1L;该版本号的目的在于验证序列化的对象和对应类是否版本匹配
  • ③transient修饰的属性不会琲序列化
  • ④静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化

5. java.io.FilterOutputStream

  • FilterOutputStream(OutputStream out)传入OutputStream的实现类如FileOutputStream即可

6.java.io.BufferedInputStream

  • BufferedInputStream(InputStream in)字节缓冲输入流,提高了IO的读写速度

7. java.io.Writer 写入字符流的抽象类

  • void write(String str)写入字符串
  • void write(String str,int off,int len)写入字符串的某一部分
  • void write(char[] cbuf)写入字符数组
  • abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分
  • void write(int c)写入单个字符字节流转成字符流,将字符串按照指定的编码表转成字节

8. java.io.BufferedWriter 字符缓冲输出流,提高了IO读写速度

  • BufferedWriter(Writer out)使用默认大小输出缓冲区,传入Writer实现类如FileWriter
  • void newLine()根据当前的系统,写入一个换行符

9. java.io.PrintWriter

  • public PrintWriter(OutputStream out, boolean autoFlush)//开启文件自动刷新
  • PrintWriter(Writer out, boolean autoFlush)//开启文件自动刷新
  • void println(String str): 输出任意类型的数据,自动写入换行操作
  • void print(String str)输出任意类型的数据

10. java.io.OutputStreamWriter

  • OutputStreamWriter类字符流转成字节流,将字符串按照指定的编码表转成字节
  • OutputStreamWriter(OutputStream out Charset cs)创建使用给定字符集的编码对象

11. java.io.FileWriter

  • FileWriter假定默认字符编码GBK和默认字节缓冲区大小都是可接受的。
  • FileWriter(File file)根据File对象构造一个FileWriter对象(覆盖)
  • FileWriter(String FileName)根据文件名创建FileWriter对象
  • FileWriter(File file,boolean append)File对象构造FileWriter对象(true继续写)
  • FileWriter(String FileName,boolean append)文件名创建FileWriter对象(true继续写)

12. java.io.Reader 读取字符流的抽象超类

  • int read()读取单个字符并返回,若没有则返回-1
  • int read(char[] cbuf)将字符读入数组,并返回读取的个数

13. java.io.BufferedReader 字符缓冲输入流,提高了IO读写速度

  • BufferedReader(Reader in)默认大小输入缓冲区
  • String readLine()返回文本行内容字符串,不包含任何行终止符,到达流的末尾返回null

14. java.io.InputStreamReader 字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符

  • InputStreamReader(InputStream in Charset cs)创建使用给定字符集的解码对象

15. java.io.FileReader

  • 读取字符文件的便捷类,假定默认字符编码GBK和默认字节缓冲区大小都是适当的
  • FileReader(File file)从file对象创建一个新的FileReader
  • FileReader(String fileName)从读取数据的文件名创建一个新的FileReader

16. flush()和close()的区别?

  • flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
  • close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,
    最后一次可以不刷新,由close完成刷新并关闭

四、 文件复制

采用高效的流,一个多个字节的方式赋值
BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));
byte[] buffer = new byte[1024];
int len = -1;
while ( (len = in.read(buffer)) != -1) {
	out.write(buffer, 0, len);
}
in.close();
out.close();
采用高效的流,一次一个字节的方式复制
BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));
int ch = -1;
while ((ch=in.read()) != -1) {
	out.write(ch);	
}		
in.close();
out.close();
采用高效的流文件复制
BufferedReader in = new BufferedReader(new FileReader("file.txt"));
BufferedWriter out = new BufferedWriter(new FileWriter("copyFile.txt"));
String line = null;
while ( (line = in.readLine()) != null ) {
	out.write(line);
	out.newLine();
}
out.close();
in.close();

总结

本文介绍了java io的使用,如果有任何疑问欢迎私信或者评论

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值