IO
File类
File类 在程序中抽象的表示计算机中的文件和目录(文件夹),一个File类的对象可以表示一个具体的文件或目录,File类的对象只表示文件,不能对文件内容进行读写操作
绝对路径:完整的路径 E:/demo1.txt
相对路径:不是全路径,是两个文件的相对同一个父级的路径 a.txt
File f1=new File("E:/demo.text");
f1.getAbsoluteFile();//返回f1的绝对路径
f1.getParent();//返回f1的父级
f1.lastModified();//文件最后的修改时间(毫秒)
f1.length();//获取文件f1内容的长度
f1.canRead();//判断文件f1是否可读
f1.canWrite();//判断文件f1是否可写
f1.isFile();//判断f1表示的是否是文件
f1.isDirectory();//判断f1表示的是否是目录
f1.delete();//删除文件,删除成功返回ture,失败false
f2.mkdir();//创建文件夹
f3.mkdirs();//创建多级目录
f3.delete();//删除目录时,目录必须为空
String [] farray=f2.list();//获得某个目录中所有的子级目录/文件 ,返回的是String类型的字符串
File[] fileArray=f2.listFiles();//获得某个目录下所有的子级目录/文件,返回文件对象(file)
输入输出
IO流
流——读写文件的操作类
类按照操作不同,单位不同分为:
字节流:每次读取数据时,是以字节为单位,一次读一个字节(可以读取任何文件)
字节输入流:InputStream read
字节输出流:OutputStream write
字符流
每次读取数据时,是以字符为单位,一次读一个字符(只适合读文本文件)
字符输入流 :Reader read
Reader 字符输入流的基类 FileReader extends InputStreamReader转换流,将读到的字节,按照指定charset转换为字符
字符输出流: Writer write
Writer 字符输出流的基类 FileWriter extends OutputStreamWriter 转换流,将字符转为字节写出字符流只能读取纯文本文件
FileReader reader = new FileReader("E:/demo1.txt");
FileWriter writer = new FileWriter("E:/demo2.txt");
char [] chars = new char[5];
int size = 0;
while ((size=reader.read(chars))!=-1){
writer.write(chars,0,size);//20013
}
reader.close(); writer.close();
节点流:流对象是直接对数据操作,构造方法(文件)
处理流/包装流
流对象中包涵的是另一个流,提供一写额外的数据处理
FileReader reader = new FileReader("E:/demo1.txt");
FileWriter writer = new FileWriter("E:/demo2.txt",true);//写入数据时,保留之前的,向后面追加内容
BufferedReader bufferedReader = new BufferedReader(reader);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
String line = null;
while((line=bufferedReader.readLine())!=null){ //readLine() 一次读取一行数据
System.out.println(line);
bufferedWriter.write(line);
bufferedWriter.newLine();//插入换行符
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
Print 打印流:
只做输出没有输入 打印流分为字节打印流和字符打印流
PrintWriter:
字符打印流 print方法可以打印各种类型数据
在javaweb项目中,服务器端向客户端响应数据以打印流的方式响应
对象序列化
对象的寿命通常随着生成该对象的程序的终止而终止。 有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。
对象的输入输出流
主要的作用是用于写入对象信息与读取对象信息,,将对象数据输出到文件中,做到对象数据的持久化
ObjectInputStream、ObjectOutputStream 都属于处理流
此过程也称为对象的序列化和反序列化,其中反序列化也是一种创建对象的方法
对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程
对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程
对象的输出流将对象写入到文件中称之为对象的序列化,所以被序列化 ,对象的类必须要实现 Serializable接口。 Serializable接口中没有任何方法。当一个类声明实现Serializable接口后,表明该类可被序列化。在类中可以生成一个编号
private static final long serialVersionUID = -1981902868337741342L;
随机生成 唯一的 serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化,如果不显示生成序列号,那么将会隐式生产,但是隐式生成后,类一旦发生改变,序列号也会随之改变.
transient关键字
默认情况下当执行了对象序列化的时候会将类中的全部属性的内容进行全部的序列化操作,但是很多情况下有一些属性可能并不需要序列化的处理,这个时候就可以在属性的定义上使用transient关键字来完成了。