应用程序开发——IO流(File、输入流、输出流、各种处理流、随机访问)

File:凡是与输入、输出相关的类、接口等都定义在java.io包下
●  是一个类,可以有构造函数创建其对象。此对象对应着一个文件或文件目录,表示文件(夹)
●  它的方法,仅涉及如何创建、删除、重命名等,文件内容的读取、修改,无法处理,必须由io流来完成
●  它的对象与平台无关
●  它的对象常作为参数传递给流的构造函数
------------------------------------------------------------------------------------------------------------------
File类的构造函数:(构造器)
File(String  pathname):以pathname为路径创建File对象
●  绝对路径:从盘符开始依次指明文件(夹)所在的路径(File  file = new File("d:\\IO\\hello.txt"))
●  相对路径:从工程所在的位置开始查找(File  file = new  File("hello.txt"))
File(String  parent,String  child):以parent为父路径,child为子路径创建File对象
注意:路径分隔符,‘/’或者‘\\’。File.separator: 获取路径的分隔符
------------------------------------------------------------------------------------------------------------------
File方法:
访问文件名:
●  getName():获得文件(夹)名
●  getPath():获得声明File对象时,File指定的路径
●  getAbsoluteFile():获得File对象形式的文件(夹)绝对路径
●  getAbsolutePath():获得字符串形式的文件(夹)绝对路径
●  getParent():获得文件(夹)的上级目录
●  renameTo(File  newName):重命名,重命名后原来的文件(夹)会被删除
文件检测:
●  exists():判断文件(夹)是否存在,存在返回true,否则返回false
●  canWrite():判断文件(夹)是否可写,可写返回true,否则返回false
●  canRead():判断文件(夹)是否可读,可读返回true,否则返回false
●  isFile():判断File对象是否是文件,是返回true,否则返回false
●  isDirectory():判断File对象是否是文件夹,是返回true,否则返回false
获取常规文件信息:
●  lastModified():返回最后一次修改文件的时间(long型的值)
●  length():返回文件(夹)的大小(byte:字节为单位)
文件和目录操作相关
●  createNewFile():在指定路径下创建一个文件。该文件存在,则失败返回false,否则创建成功返回true
●  delete():删除指定的文件(夹)
●  mkDir():新建文件(夹),只创建最后一级目录(路径中有一个文件夹不存在时,则失败)
●  mkDirs():新建文件(夹),目录中的路径不存在时,同时创建
●  list():返回当前路径下的所有文件(夹)String类型的数组
●  listFiles():返回当前路径下的所有文件(夹)File类型的数组

------------------------------------------------------------------------------------------------------------------
IO原理:(IO流用来处理设备之间的数据传输)
●  input(输入):读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中
●  output(输出):将程序(内存)数据输出到磁盘、光盘等存储设备中
注意:输入输出的叫法是相对的,看自身承担着什么角色
------------------------------------------------------------------------------------------------------------------
流的分类:
●  按照数据单位:字节流(二进制数据操作如视频、音频、图片等)(8 bit),字符流(只能处理纯文本文件)(16 bit)  
●  按照流向:输入流(把文件读取到程序中),输出流(从程序输出的)
●  按照角色:节点流,处理流

注意:IO流共涉及40多个类,都是这4个类派生,这四个类派生出来的子类名称都是以其父类名作为子类名后缀
------------------------------------------------------------------------------------------------------------------
IO流体系:

------------------------------------------------------------------------------------------------------------------
InputStream、Reader:所有输入流的基类
InputStream:(字节输入流)


Reader:(字符输入流)

注意:会出现编译时异常(可能找不到文件、FileNotFoundException)需要显示处理。文件读取方法有多种,根据情况选择使用哪种方式读取。打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件IO资源。每次读取多少字符、字节合适就好,并不是越大或者越小就好
------------------------------------------------------------------------------------------------------------------
OutputStream、Writer:所有输出流的基类
OutputStream:(字节输出流)

Writer:(字符输出流)

注意:会出现编译时异常(可能找不到文件、FileNotFoundException)需要显示处理。文件输出方法有多种,根据情况选择使用哪种方式输出。打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件IO资源
-----------------------------------------------------------------------------------------------------------------
输入输出流综合使用:
字节流:

字符流:

注意:写入文件时,目录下有同名文件将被覆盖,读取文件时,必须保证该文件已存在,否则出异常
------------------------------------------------------------------------------------------------------------------
处理流之一:缓冲流
好比网上下载文件,没开通会员只能以KB速度下载,开通会员后就能以M的速度下载(缓冲流,提高效率)
BufferedInputStream、BufferedOutputStream:

BufferedReader、BufferedWriter:

注意:缓冲流要“套接”在相应的节点流上。对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
------------------------------------------------------------------------------------------------------------------
处理流之二:转换流:字节流和字符流之间的转换

注意:字节流中的数据都是字符时,转成字符流操作更高效。构造器第二个参数为相应的字符集编码
------------------------------------------------------------------------------------------------------------------
处理流之三:System.in、System.out标准输入输出流
●  System.in的类型是InputStream
●  System.out的类型是PrintStream

------------------------------------------------------------------------------------------------------------------
处理流之四:对象流:用于存储和读取对象,把Java中的对象写入到数据源中,也能把对象从数据源中还原回来
●  序列化Serialize:把java对象转换成平台无关的二进制流,把数据持久地保存在磁盘上或者其他文件中
●  反序列化Deserialize:把磁盘上或者其他文件中的数据通过二进制流获取,恢复成原来java对象

注意:不能序列化static和transient修饰的成员变量。如果需要让某个对象可序列化,则必须让其类可序列化,并且如果此类的某字段不是基本数据类型或String类型,而是另一个引用类型,那么这个引用类型也必须可序列化。在该类上必须实现Externalizable或者Serializable(常用此接口)接口之一。实现Serializable接口的类都有一个表示序列化版本标识符的静态变量(private static final long serialVersionUID = 1L)。serialVersionUID用来表明类的不同版本间的兼容性,如果没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID可能发生变化。故建议,显示声明
------------------------------------------------------------------------------------------------------------------
RandomAccessFile类:支持随机访问的方式,程序可以直接跳到文件的任意地方来读、写文件
方法:
●  getFilePointer():获取文件记录指针的当前位置
●  seek(long  pos):将文件记录指针定位到pos位置
构造器:RandomAccessFile(File file, String mode) 、RandomAccessFile(String name, String mode)
●  mode:访问模式
●  r:   以只读方式打开
●  rw:打开以便读取和写入
●  rwd:打开以便读取和写入;同步文件内容的更新
●  rws:打开以便读取和写入;同步文件内容和元数据的更新
读取文件内容:

写入文件内容:

------------------------------------------------------------------------------------------------------------------
字符集编码表:
计算机只能识别二进制数据,为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表
常见的编码表:
●  ASCII:美国标准信息交换码
●  ISO8859-1:拉丁码表。欧洲码表
●  GB2312:中国的中文编码表
●  GBK:中国的中文编码表升级,融合了更多的中文文字符号
●  Unicode:国际标准码,融合了多种文字(所有文字都用两个字节来表示,Java使用的就是unicode)
●  UTF-8:最多用三个字节来表示一个字符
注意:编码:字符串--->字节数组。解码:字节数组--->字符串
------------------------------------------------------------------------------------------------------------------
流的总结:
●  流是用来处理数据的
●  处理数据时,一定要先明确数据源,与数据目的地
●  数据源可以是文件,可以是键盘
●  数据目的地可以是文件、显示器或者其他设备
●  而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理、转换处理等
------------------------------------------------------------------------------------------------------------------
自己整理,有些地方是扒拉的,如有侵犯,还望告知





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值