一个File 类的对象,可以表示计算机硬盘上一个具体的文件或目录(文件夹)
通过File类的对象 来获取文件/目录的相关信息(例如创建时间,是否可写…),
但是不能读取文件中的内容
File f=new File(pathname:“E:/a.txt”);
File f1 = new File (pathname:“E:/a”);//表示E盘中的a 文件夹
Sout(f. canWrite()); //返回文件是否可以写入
Sout(f.exists()); //判断文件/目录是否存在
Sout(f.getAbsoluteFile()); // 获取文件绝对地址
Sout(f.isHidden()); //返回文件/目录是否是隐藏模式
Sout(f.isDirectory()); //判断是否是目录
Sout(f.isFile()); // 判断是否是文件
Sout(f.lastModidied()); //返回文件最后一次修改的时间(long 类型的 毫秒值)
Sout(new Date(1659435531L)); //把long类型的时间 转换为Date对象
Sout(f.getName()); //获取文件名
Boolean res = f.createNewFile(); // 创建文件
Sout( f.delete()); //删除文件
File f = new File(“E:/aa”);
f.mkdir(); //只能创建单级目录
f.delete(); // 也可以删除文件夹的,但是要求文件夹中没有其他的内容
File f = new File (“E:/aa//bb/cc”);
f.mkdirs(); //可以创建多级目录
f.length(); //获取到的是文件的字节数,一个英文字母占一个字节,在utf-8编码表中一个汉字占3个字节
File f = new File(“E:/a”);
String[] Strings = f.list(); //获取到指定目录下一级所有文件/目录的名字(String)
For(string s : strings){
Sout(s);
}
File [ ] files = f.listFiles();
For(File file : files){
If(file.isDirectory){
}
file.delete();
}
输入和输出 是相对于程序而言的
Java中还提供了许多的类,一些负责从硬盘上读文件(输入),
一些负责将程序中的数据写(输出)到目标位置,
这些类形象的成为流(管道)
字节:计算机最小存储单位是字节,电脑上所有的文件最终都是以字节的 形式存储到硬盘的
例如:图片、视频、音频……
字符:文字,底层还是字节 例如:中à 20013à3个字节
字符流 以字符为单位进行读写操作 底层会将原始的字节转为字符
字符流只能读取,纯文本文件(只能写字符,不能有其他内容)
字节流:一次读写操作以字节为单位
输入流:
InputStream
文件输入字节流: FileInputStream
输出流:
OutputStream
文件输出字节流:FileOutputStream
字符流:一次读写操作以字符为单位(一个汉字占3个字节 一次可以直接读到一个字符)
输入流:
Reader
输出流:
Write
节点流与处理流
节点流: 原始的流,直接用来操作文件(数据),例如 FileInputStream
处理流:;在节点流的基础上,对读到数据进行额外的二次处理
Reader 首先想到字符流
PrintWriter
单向的输出,
后面再javaEE(服务器端开发)中,可以使用PrintWriter从后端程序响应数据
在javaweb项目中,服务器端向客户端响应数据以打印流的方式响应.
PrintWriter printWriter = new PrintWriter(“E:/index.html”);
printWriter.write(“<h1>一级标签<h1>”);
printWriter.close();
对象输入输出流:
有时候,需要将运行中的对象信息持久保存起来,因为对象在内存中程序如果中止 对象信息就不存在了
将对象信息输出到文件的过程,称为对象的序列化,使用ObjectOutoutStream完成(处理流)
将对象信息从文件中输入到java程序的过程,称为对象反序列化,使用的ObjectInputStream
对象的反序列化,会在内存中创建新的对象保存数据,所以,也是java中创建对象的一种方式
String s = new String (“abc”);
Date date = new Date ();
FileOutoutStream out = new FileOutputStream(“E:/obj.txt”);
ObjectOutputStream outPutStream = new ObjectOutputStream(out);
~.writeObject(s)
~.writeObject(data);
~.flush();
~.close();
当我们把一个类的对象用输出流向外输出时,要求这个类必须要实现序列化接口,
否则会报错,java.io.NotSerializableException
Implements Serializable
一旦一个类实现了Serializable 接口,会自动的为每个生成一个序列化编码(唯一的)
虽然实现Serializable接口,可以生成一个序列化id号,但是一旦类信息发生了修改,序列化编号就会变
如果重新输入对象时,两次的序列化版本号就不一致了
解决办法:
显示的在类中生成一个序列化版本号