信息基本编码方式
(1)gbk编码,中文2个字节,英文1个字节
(2)utf-8,中文3个字节,英文1个字节
(3)java采用双字节编码,是utf-16编码,中文2字节,英文2字节
File类
(1)只能用于访问目录或文件的信息(名称,大小),不能用于文件内容的访问
(2)基本API
file.exists();//判断文件是否存在
file.mkdir();//创建文件夹
file.delete();//删除
file.isDirectory();//目录不存在返回false
file.isFile();
file.createNewFile();//创建文件
System.out.println(file);//打印filetoString的内容,即路径
file.getAbsolutePath();//等价于上
file.getName();
file.getParentFile();//返回路径
file.mkdirs();//创建多级目录
(3)string dir.list()返回目录下的目录及文件的名称,不包括子目录下的;
file[] dir.listFiles()返回目录下的目录及文件,不包括子目录下的;
遍历所有文件和目录则需要递归
(4)RandomAccessFile提供对文件的访问,可以读写
也支持随机访问文件,支持访问文件的任何位置
(1)文件模型:一个字节一个字节
(2)打开方式:"rw","r" RandomAccessFile raf=new RandomAccessFile(file,"rw");
(3)写 raf.write(int) 一次只写一个字节,有个文件指针进行移动
(4)读 int b=raf.read() 读一个字节
(5)文件读写完要关闭
(5)IO流(输入输出流):分为字节流,字符流
(1)字节流
1.inputstream,outputstream
2.EOF是end
3.输入流的基本方法
int b=in.read();读一个字节,填充int低八位
in.read(byte[]b);读到字节数组
in.read(byteo[]b,int start,int size);读b到文件从s开始的size个,返回读到字节的个数
4.输出流的基本方法
out.write(int b);写b的低八位到byte
out.write(byte[]b);数组写入到流
out.write(byte[]b,int s,int size),把b中的s开始size写到流
5.InputSteam的子类FileInputStream
6.FileOutputStream
注:FileOutputStream out=new FileOutputStream("demo/raf3.dat");能自动生成output文件
7.DataOutputSteam/DataIntputStream是对”流“的扩展,更方便的操作int,long,字符等类型数据
DateOutputSteam writeInt()/writeDouble()/writeUTF()实质的FileOutStream中方法的包装
(2)字符流
1.java的文本(char)是16位无符号整数,是字符的unicode双字节编码;
文件是byte,byte...的数据序列
文本文件是文本序列按照某种编码方式序列化为byte的存储
2.字符流(reader writer)
字节字符转换流:
InputStreamReader byte解析为char
OutputStreamWriter char流编码为byte流
文件读写流:
FileReader,FileWriter
字符流过滤器:
BufferedReader readLine,不识别换行符,一次读一行
BufferedWriter/PrintWriter 一次写一行
(6)对象的序列化
序列化就是把object转化为byte序列
1.ObjectOutputStream,是过滤流,序列流 wirteObjcect
ObjectInputStream ,readObject
2. 序列化接口(Serializable)
注:transient关键字,不做jvm默认的序列化,但可以完成自定义的序列化