IO
IO
File
-
概念:
- 代表物理盘符中的一个文件或者文件夹。
-
方法:
- createNewFile()//创建一个新文件
- mkdir()//创建一个新目录
- delete()//删除文件或空目录
- exists()//判断File对象所对象所代表的对象是否存在
- getAbsolutePath()//获取文件的绝对路径
- getName()//取得名字
- getParent()//获取文件/目录所在的目录
- isDirectory()//是否是目录
- isFile()//是否是文件
- length()//获得文件的长度
- listFiles()//列出目录中的所有内容
- renameTo()//修改文件名为
-
方法
-
文件
-
创建: boolean b=file.createNewFile();
-
直接删除: boolean b2=file.delete();
-
JVM直接删除file.deleteOnExit();
-
“文件长度:”+file.length());
-
“文件名称:”+file.getName());
-
“文件绝对路径:”+file.getAbsolutePath());
-
“规范路径:”+file.getCanonicalPath());
-
“文件路径:”+file.getPath());
-
“文件父目录:”+file.getParent());
-
“文件最后一次修改:”+new Date(file.lastModified()).toLocaleString());
-
“是否存在:”+file.exists());
-
“是否只读:”+file.canWrite());
-
“是否隐藏:”+file.isHidden());
-
“是不是文件:”+file.isFile());
-
“是不是绝对路径:”+file.isAbsolute());
-
修改名称: (具有剪切的功能)
- file.renameTo(new File(“zhangsan.txt”));
-
-
文件夹
-
dir.mkdir();//创建单级目录
-
boolean b=dir.mkdirs();//创建多级目录
-
boolean b2=dir.delete();直接删除:只删除最里层空目录
-
dir.deleteOnExit();JVM删除
-
“获取路径:”+dir.getPath());
-
“获取绝对路径:”+dir.getAbsolutePath());
-
“获取名称:”+dir.getName());
-
“规范名称:”+dir.getCanonicalPath());
-
“是否存在:”+dir.exists());
-
“是否隐藏:”+dir.isHidden());
-
“是不是文件夹:”+dir.isDirectory());
-
boolean b3=dir.renameTo(new File(“d:\aaa\bbb\hello”));重命名
-
获取目录的子目录和文件
-
File[] roots = File.listRoots();获取根目录
-
-
-
FileFilter接口
- 当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。
- public interface FileFilter
- boolean accept(File pathname)
流
-
概念:
- 内存与存储设备之间传输数据的通道。
-
分类
-
按方向
- 输入流:将<存储设备>中的内容读入到<内存>中。
- 输出流:将<内存>中的内容写入到<存储设备>中。
-
按单位
- 字节流:以字节为单位,可以读写所有数据 。
- 字符流:以字符为单位,只能读写文本数据 。
-
按功能:
- 节点流:具有实际传输数据的读写功能。
- 过滤流:在节点流的基础之上增强功能。
-
-
字节流
-
字节流的父类(抽象类):
-
InputStream:字节输入流
-
方法:
- public int read(){}
- public int read(byte[] b){}
- public int read(byte[] b,int off,int len){}
-
子类: 字节节点流FileInputStream
- public int read(byte[] b) //从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1。
- System.in
-
字节过滤流: FilterInputStream
-
字节缓冲流: BufferedInputStream
- 提高IO效率,减少访问磁盘的次数;
- 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
-
-
字节对象流: ObjectInputStream
-
增强了缓冲区功能
-
增强了读写8种基本数据类型和字符串功能
-
增强了读写对象的功能:
- eadObject() 从流中读取一个对象
-
-
-
OutputStream:字节输出流
-
方法:
- public void write(int n){}
- public void write(byte[] b){}
- public void write(byte[] b,int off,int len){}
-
子类: 字节节点流FileOutputStream
- public void write(byte[] b) //一次写多个字节,将b数组中所有字节,写入输出流。
-
字节过滤流: FilterOutputStream
-
字节缓冲流: BufferedOutputStream
- 提高IO效率,减少访问磁盘的次数;
- 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
-
字节打印流: PrintStream
-
System.out
-
PrintStream类型
-
默认打印到控制台
-
重定向标准输出流
- System.setOut(new PrintStream(“d:\console.txt”));
-
-
原样打印
-
-
-
字节对象流: ObjectOutputStream
-
增强了缓冲区功能
-
增强了读写8种基本数据类型和字符串功能
-
增强了读写对象的功能:
- writeObject(Object obj) 向流中写入一个对象
-
-
-
-
使用流传输对象的过程称为序列化、反序列化。
-
序列化:把对象写入到硬盘或网络中的过程
-
反序列化:把硬盘或网络的二进制文件读取到内存形成对象的过程。
-
对象序列化的细节:
-
序列化的类必须实现Serializable(自动序列化, 标记接口)、Externalizable(手动序列化接口)
-
transient修饰为临时属性,不参与序列化。
-
读取到文件尾部的标志:java.io.EOFException。
-
使用serialVersionUID属性保证序列化的类和反序列化的类是同一个类。
-
(非必须,系统会自动生成)序列化的类要添加一个私有的Long类型静态常量:serverVersionUID, 保证序列化的类反序列化的类是同一个类
-
静态属性不可以被序列化
-
-
面试题: 使用transient的属性一定不能序列化吗?
- 能 使用手动序列化接口Externalizable
-
-
-
字符流
-
字符流的父类(抽象类):
-
Reader:字符输入流
-
方法
- public int read(){}
- public int read(char[] c){}
- public int read(char[] b,int off,int len){}
-
字符转换流: InputStreamReader
-
文件字符流: FileReader
- public int read(char[] c) //从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1。
-
可将字节流转换为字符流。
-
可设置字符的编码方式。
-
-
字符缓冲流:
-
BufferedReader
- 支持输入换行符。
- 可一次写一行
-
-
-
Writer:字符输出流
-
方法
- public void write(int n){}
- public void write(String str){}
- public void write(char[] c){}
-
字符转换流: OutputStreamWriter
-
文件字符流: FileWriter
- public void write(String str) //一次写多个字符,将b数组中所有字符,写入输出流。
-
可将字节流转换为字符流。
-
可设置字符的编码方式。
-
-
字符缓冲流:
-
BufferedWriter
- 支持输入换行符。
- 可一次读一行
-
-
字符打印流: PrintWriter
- 封装了print() 和 println()方法,
- 支持写入后换行
- 支持数据原样打印
-
-
注意事项: 中文汉字 用字符 两个字节 因为在系统中存放的是Uncode编码两个字节 用字节打印出来是三个字节
-
-
-
System.in 控制台输入流
-
int data=System.in.read();
-
//System.in转成字符流
- InputStreamReader isr=new InputStreamReader(System.in);
- int data=isr.read();
-
缓冲流
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- String data=br.readLine();
- System.out.println(data);
-
-
System.out 控制台输出流
-
随机访问文件夹类: RandomAccessFile
-
RandomAccessFile即可以读取文件内容,也可以向文件中写入内容。
-
但是和其他输入/输入流不同的是,程序可以直接跳到文件的任意位置来读写数据。
-
读写模式
- r:只读
- rw:读写
-
作用
- 快速定位数据,支持并发读写
- 方便的获取二进制文件
-
方法
-
randomAccessFile.seek(21)
- seek()从文件开头位置设置文件指针的偏移量
-
randomAccessFile.skipBytes(21);
- 跳过指定字节个数
-
-
代码演示
-
-
Properties集合
-
属性集合。
-
特点:
- 存储属性名和属性值。
- 属性名和属性值都是字符串类型。
- 没有泛型。
- 和流有关。
-
代码演示
-
-
继承关系图