系列文章目录
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概述
- 二、IO的继承体系
- 三、IO相关api
- 1.java.io.File
- 2.java.io.OutputStream
- 3. java.io.FlieOutputStream
- 4. java.io.ObjectOutputStream
- 5. java.io.FilterOutputStream
- 6.java.io.BufferedInputStream
- 7. java.io.Writer 写入字符流的抽象类
- 8. java.io.BufferedWriter 字符缓冲输出流,提高了IO读写速度
- 9. java.io.PrintWriter
- 10. java.io.OutputStreamWriter
- 11. java.io.FileWriter
- 12. java.io.Reader 读取字符流的抽象超类
- 13. java.io.BufferedReader 字符缓冲输入流,提高了IO读写速度
- 14. java.io.InputStreamReader 字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符
- 15. java.io.FileReader
- 16. flush()和close()的区别?
- 四、 文件复制
- 总结
前言
本文主要介绍io相关类的主要api
一、IO概述
- IO就是将内存中的数据持久化存储到持久化设备上,使用的时候从持久化设备上读入内存
- IO操作:当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
二、IO的继承体系
三、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的使用,如果有任何疑问欢迎私信或者评论