Java:IO

input/output
输入/输出

  • java.io 包
    • File
    • RandomAccessFile
    • InputStream/OutputStream
    • FileInputStream/FileOutputStream
    • BufferedInputStream/BufferedOutputStream
    • ObjectInputStream/ObjectOutputStream
    • Reader/Writer
    • InputStreamReader/OutputStreamWtiter

File

  • 封装磁盘路径字符串
    • 文件路径
    • 文件夹路径
    • 不存在的路径
  • 可以获得文件或文件夹属性
    • length(); 文件字节量,对文件夹无效
    • lastModified(); 最后修改时间,毫秒值
    • getName(); 文件名
    • getParent(); 父文件夹
    • getAbsolutePath(); 完整路径
    • exists(); 是否存在
    • isFile(); 是否是文件
    • isDirectory(); 是否是文件夹
  • 可以创建、删除文件和文件夹
    • createNewFile(); 创建文件
    • mkdirs(); 创建多层文件夹
    • delete(); 删除文件或空文件夹
    • File.createTempFile(“文件名”, “后缀”); 在系统的临时目录,创建临时文件
  • 对文件夹进行列表
    • list(); 获得文件、文件夹名称字符串的数组String[]
    • listFiles(); 获得文件、文件夹的封装对象数组 File[],绝对路径
RandomAccessFile

读写文件数据的工具

  • 有一个下标,读写下标位置的字节值
  • 每读写一个字节值,下标会自动向后移动
  • 下标可以任意定位
  • 创建对象:
    • new RandomAccessFile(文件,“r”); 只读
    • new RandomAccessFile(文件,“rw”); 读写
  • 方法:
    • write(int b); int的四个字节,只输出最后一个字节值写入文件,文件不存在,自动新建,文件夹不存在则报错
    • write(byte[] b); 输出数组中全部字节值写入文件
    • write(brte[] b,start,length); 输出数组中,从start开始的length个字节值写入文件
    • close();释放系统资源,不能再读写文件
    • read(); 读取一个字节,在前面在补3个0字节,变成int类型。读取结束,再读取返回-1
    • read(byte[] buff); 根据数组长度,从文件读取一批字节值,放入数组,并返回这一批的数量,一般用8k,8192
    • seek(int position); 定位下标到指定的位置
    • getFilePointer(); 获取当前下标所在位置

流 Stream

把数据的读写,抽象成数据在管道中流动

  • 流是单向的
    • 输入流,只能用来读取数据
    • 输出流,只能用来输出数据
  • 流只能顺序读写数据
    • 流只能一次性从头到尾读写数据
    • 流动过的数据,不能反复流动
    • 重复读写数据,只能重新创建流
InputStream/OutputStream
  • 字节流的抽象父类
  • 方法
    • write(int b);
    • write(byte[]);
    • write(byte[],start,length);
    • flush(); 刷出缓存数据
    • read();
    • read(byte[] buff);
    • available(); 剩余可读取的字节上
FileInputStream / FileOutputStrean
  • 文件流:直接插在文件上,读写文件数据
  • 创建对象
    • new FileOutputStream(文件); 不管文件是否存在,都会新建一个文件,如果已经存在,新建的空文件直接将其覆盖
    • new FileOutputStream(文件,true); 文件存在,追加数据。
    • new FileInputStream(文件); 新建,存在则覆盖

高级流,操作流

  • 与其他流相接,提供特定的数据处理功能
  • 对高级流的操作,会对相接的流执行相同的操作
BufferedInputStream/BufferedOutputStream
  • 缓冲流,帮助做批量读写操作
  • 内部数组默认长度8192,缓存满自动刷出,未满时需要手动flush()刷出缓存数据
  • flush();
  • close(); 高级流的close()执行两步,1.flush();2.关闭相接的流
ObjectInputStream/ObjectOutputStream

对象序列化,和反序列化

  • 序列化: 对象的信息,按固定格式,转成一串字节序列进行输出
  • ObjectOutputStream
    • writeObject(Object); 把对象,序列化输出
  • ObjectInputStream
    • readObject(); 读取对象的序列化数据,反序列化恢复对象

implements Serializable; 空接口,做序列化标识

  • 不被序列化的成员:
    • static 属于类,不随对象被序列化输出
    • tranisent 临时,只在程序运行期间在内存中存在,不会随对象,序列化持久保存
  • 序列化版本
    • 版本定义
      private static final long seriaLVersionUID = 1L;
      1L版本1、4L版本4。
      
    • 旧版本的数据,不允许恢复成新版本的类型
    • 如果自己步定义,编译器编译时,会根据类的定义信息,自动生产一个版本

字符编码,字符集

  • ASC-II : 0-127,英文字符、标点

  • iso-8859-1(1最常用,还有2345),Latin-1 : 160-255 西欧字符

  • GB2312 :0-65535 中文 7k+

  • GBK :20902个中文

  • Unicode : 统一码,万国码,包含100万+ 常用表,双字节。生僻字,三字节、四字节

  • UTF-8 : 最常用,Unicode Transfer Format:Unicode传输格式。英文单字节,中文三字节

  • Java 的是char 类型字符,采用Unicode编码

    • ‘a’ '\u0061`
    • ‘中’ ‘\u4e2d’
  • Java 的字符编码转换运算

    • Unicode 转其他编码
      • s.getBytes(“编码”); 无编码格式则Unicode转系统默认编码;返回byte[]数组
    • 其他编码转 Unicode
      • new String(byte[]);从系统默认编码转 Unicode
      • new String(byte[],“UTF-8”); 从指定编码转。
Reader/Writer
  • 字符流的抽象父类
  • 方法:
    • write(int c); int的四个字节中,末尾两个字节是char类型字符,只输出末尾两个字符
    • write(byte[, start, length])
    • write(String)
    • read()
    • read(char[] buff)
InputStreamReader/OutputStreamWriter
InputStreamReader in=new InputStreamReader(文件流,encoding)
OutputStreamReader out=new OutputStreamReader(文件流,encoding)
  • Reader和Writer的子类
  • 字符编码转换流
  • InputStreamReader; 读取其他编码字符,转成Unicode编码
  • OutputStreamWriter; Unicode字符,转成其他编码字节值,输出
BufferedReader/BufferedWriter

字符缓冲流,提高单个字符读写效率

  • BufferedReader的方法
    • readLine(); 读取一行字符串,不包含末尾换行。读取结束,再读取,返回null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值