2019独角兽企业重金招聘Python工程师标准>>>
1)编码问题
(1)几种常见编码:
- gbk编码中文占用2个字节,英文占用1个字节
- utf-8编码中文占用3个字节,英文占用一个字节
- utf-16be 编码中文占用2个字节,英文占用2个字节 (2)当你的字节序列是某种编码格式时,这个时候想把字节序列变成字符串,也需要使用这种编码方式,否则会出现乱码。
(3)文本文件 就是字节序列,可以是任意编码的字节序列,如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码。
2)java.io.File
java.io.File用来表示文件(目录)我们就可以操作硬盘上的文件和目录。File类值用来表示用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问。 File常用的API :
-
file.mkdir(); // 创建文件夹
-
file.delete(); // 删除
-
File.separator // 设置分隔符,可移植到不同系统
-
file.exists(); // 是否存在
-
file.isDirectory(); // 是否目录
-
file.isFile(); // 是否文件
-
file.createNewFile(); // 创建文件
-
file.list();// 方法返回的是字符串数组 直接子的名称
-
file.listFiles();// 返回的是直接子目录(文件)的抽象
3)RandomAccessFile的使用
(1)RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。
(2)RandomAccessFile支持随机访问文件,可以访问文件的任意位置
(3)Java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合
(4)打开文件:有两种模式rw读写、r只读 RandomAccessFile raf=new RandomAccessFile(file,"rw"); 文件指针,打开文件时指针在开头pointer==0;
(5)写方法 raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
(6)读方法 int b=raf.read()----->读一个字节
(7)文件读写完成以后一定要关闭(Oracle官方说明)
4)IO流(输入流、输出流)(字节流、字符流)
(1)InPutStream、OutPutStream InPutStream 抽象了应用程序读取数据的方式 OutPutStream 抽象了应用程序写出数据的方式
(2)EOF = End 或者说读到-1就读到结尾
(3)输入流基本方法是读 int b = in.read();读取一个字节无符号填充到int的低八位。-1是EOF in.read(byte[] buf)读取数据填充到字节数组buf in.read(byte[] buf,int start,int size)读取数据到字节数组buf,从buf的start位置开始存放size长度的数据
(4)输出流基本方法是写 out.write(int b) 写出一个byte到流,b的低8位 out.write(byte[] buf) 将buf字节数组都写入到流 out.write(byte[] buf,int start,int size)字节数组buf从start位置开始写size长度的字节到流
(5)FileInPutStream 具体实现了在文件上读取数据
(6)FileOutputStream 实现了向文件中写出byte数据的方法。 例:FileOutputStream out = new FileOutputStream("xxxxxx");如果该文件不存在,则创建,如果存在,则将原来的删除并且添加新的。 若想追加写入,FileOutputStream out = new FileOutputStream("xxxxxx",true);
out.write(buf,0,b); out.flush();//最好加上这句
(7)DataOutputStream/DataInputStream 对"流"功能的扩展,可以更加方面的读取int,long,字符等类型数据 DataOutputStream writeInt()/writeDouble()/writeUTF()
其新建对象为嵌套创建,例: String file = "xxx"; DataInputStream dis = new DataInputStream(new FileInputStream(file)); DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
而且writeUTF()和readUTF()都是utf-8编码格式 writeChars()和readChars()都是utf-16be编码格式
(8)
- BufferedInputStream和BufferedOutputStream:这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲区,这种流模式 提高了IO的性能;
- 从应用程序中把输入放入文件,相当于将一缸水倒入另一缸水中
- FileOutpuStream---->write()方法相当于一滴一滴地把水转移过去
- DataOutputStream---->writexxx()方法会方便一些,相当于一瓢一瓢把水转移过去
- BufferedOutputStream---->write()方法更方便,相当于一瓢一瓢先放入桶中,再从桶中倒入到缸中,性能更好;