JAVA I/O输入输出流

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()方法更方便,相当于一瓢一瓢先放入桶中,再从桶中倒入到缸中,性能更好;

猜你喜欢

转载自my.oschina.net/u/3696939/blog/1553623