黑马日记第八篇——IO

---------------------- android培训 、java培训、期待与您交流!----------------------
一,IO简介
IO流用于操作设备之间的数据传输,java用于操作流的对象都封装在IO包中。
根据流功能层次的不同可以分为:节点流与处理流。
根据流处理数据类型不用可分为:字节流与字符流。
常用抽象基类有四个:
字节流:InputStream、OutputStream。
字符流:Reader,Writer。
注:由这四个类派生的子类都是以父类名作为后缀,前缀是该类对象的功能。
二、字符流与字节流
Writer:字符输出流。一般用于写入纯文本文件。其子类FileWriter用于操作文件。如:FileWriter("c:\\1.txt",boolean),如果构造中带有布尔型参数,传入true代表写入文件时不覆盖已有的文件,而是在该文件末尾处续写,反之或者构造不带布尔参数时,会覆盖已有文件。
Reader:字符输入流。一般用于读取纯文本文件。其子类FileReader用于操作文件。一般使用FileReader读取数据有两种方式,即一个读一个字符和通过字符数组进行读取。读取数据的返回值类型为int型,当int值为-1时,说明读到文件结尾。
字符流缓冲区:
缓冲区概念类似于将数据转存后在整体写入的动作,可以提高运行效率,java中提供了两个缓冲区对象:BufferedReader、BufferedWriter。
一般读写都需要提高效率所以要加入缓冲区技术,加入缓冲区后的一般步骤如下:
写入:
1,创建字符写入流对象。
2,加入缓冲区,将写入流对象作为参数传递给缓冲区。
3,使用缓冲区要记得刷新,另外,缓冲区方式带有跨平台的换行方法,在写入时应记得换行。
4,关闭缓冲区,缓冲区流对象关闭的即是写入流对象,所以在关闭缓冲区后不必再次关闭写入流对象。
读取:
1,创建读取流对象。
2,加入缓冲区,将读取流对象作为参数传递给缓冲区。
3,缓冲区中有读行的方法,所以可以更加简便地读取数据。
4,关闭缓冲区。
注:LineNumberReader继承自BufferedReader,它提供了对读取行号的方法,可以设置行号,读取行号和读一行的方法。
OutputStream:字节输出流。用于写入字节文件。其子类FileOutputStream在写入字节文件时不需要进行刷新动作。
InputStream:字节输入流。用于读取字节文件。其子类FileInputStream在读取文件时返回值为int型。
字节流缓冲区:
字节流缓冲区也为提高效率而存在,使用方法与字符流缓冲区类似,java中也提供了两个对象:BufferedOutputStream、BufferedOutputStream。
转换流:
转换流是字符和字节之间的桥梁,通常在涉及到字符编码转换时需要用到转换流,因为只有转换流可以指定编码表。
转换流对象:InputStreamReader(字节通向字符)、OutputStreamWriter(字符通向字节)。通过转换可以再以加入缓冲区的方式来使用字符特有操作方法。
重点:键盘录入的一般书写格式:BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
流操作的基本规律:
如何判断使用哪一个流对象?(三个明确)
1,明确源和目的(源:输入流,目的:输出流)。
2,明确操作的对象是否为纯文本,如果是,使用字符流;如果不是,使用字节流。
3,通过设备来明确具体使用哪个具体对象。(原设备:内存,硬盘,键盘;目的设备:内存,硬盘,控制台)
三、File类
可以将文件与文件夹封装成对象,方便于对文件与文件夹的属性进行操作。并可以将该对象作为参数传递。
File类的常见方法:
1,创建:
boolean createNewFile():在指定位置创建文件,如果已存在则不创建返回false。
boolean createTempFile():创建临时文件。
boolean mkdir():创建多级文件夹。
2,删除:
boolean delete():删除文件或目录。
deleteOnExit():退出程序时删除指定文件。
3,判断:
boolean canExcute():判断是否为可执行文件。
boolean canRead():判断该对象是否可读。
boolean canWrite():判断该对象是否可写。
boolean exists():判断该对象是否存在。
boolean isDirectory():判断该对象是否为文件夹。
boolean isFile():判断该对象是否是文件。
boolean isHidden():判断该对象是否为隐藏。
boolean isAbsolute():判断该对象路径是否为绝对路径(与存在与否无关。)。
4,获取信息
String getName():获取文件名。
String getPath():获取文件路径(封装的)。
String getParent():获取文件父目录。
String getAbsolutePath():获取对象的绝对路径。
File getAbsoluteFile():获取该对象的绝对路径后并封装成File对象返回。
long lastModified():获取对象最后一次修改时间。
long length():获取对象的大小,如果是目录返回0。
5,其他
renameTo():将参数对象的名字付给调用者(跨盘操作时类似于改名并剪切)。
File[] listRoots():列出文件对象系统根(盘符)。
String[] list():返回指定目录下的所有文件名,可以通过传入过滤器方式选择返回的文件名。
File[] listFile:返回指定目录下的所有文件对象,可以传入过滤器来过滤返回的文件对象。
注:在使用过滤器FilenameFilter时,可以使用匿名内部类方式(需覆盖accept方法)。
四、Properties
Properties是hashtable的子类,存储的都是字符串,具备Map集合特点,是集合中与IO技术相结合的集合容器。可以用于采用键值对形式的配置文件。
load():需传入一个输入流,与其关联,加载信息,通过setProperty()方法来设置键值对。
store():需传入一个输出流,与其关联,可以将修改后的信息传递给输出流,参数中应包含注释信息。
一般可以让程序在运行结束后再次运行时能够加载上一次保存的信息。使程序具备连贯性。
五、其他流对象
打印流:
提供了打印方法,可以将各种数据类型数据原样打印。
PrintStream构造函数可以接收的数据类型:File对象、字符串路径、字节流输出对象。
PrintWriter构造函数可以接收的数据类型:File对象、字符串路径、字节流输出对象、字符流输出对象。
序列流(合并流):
SequenceInputStream它的构造方法可以用来合并两个或多个字节输入流,当接受了多个输入流时,需要通过Vector类中的的elements()方法获得的Enumeration作为参数传递进来,但是由于Vector效率较低,可以通过内部类方式以迭代器封装在内部来实现,进而提高效率。
操作对象的流:
ObjectInputStream、ObjectOutputStream、writeObject、readObject。这些流可以将内存中的对象转存到硬盘中。
在输出对象时,对象需要实现java.io.Serializable接口。这是一个标记接口,不包含任何方法。
通过自定义UID的方法可以使实例化后的对象可被多次操作。语句为:public static final long serialVersionUID = XXL;
管道流:
PipedInputStream、PipedOutputStream。输入和输出流可以直接连接,结合多线程使用,可以通过构造函数连接,也可以通过connect方法来连接。
特殊:
RamdomAccessFile:该类直接继承自Object类,具备读写功能,内部封装了一个大型数组,通过指针对数组元素进行操作。可以通过getFilePointer()方法获取指针位置,同时也可以通过seek()方法改变指针位置。它的skipBytes()方法可以进行跳过指定字节数读取,但不能返回读取。
六、常见编码表
ASCII:美国标准信息交换码,一个字节的7位来表示。
ISO8859-1:拉丁码表,一个字节的8位来表示。
GB2312:中国的中文编码表。
GBK:中文编码表升级版,融合更多字符符号。
Unicode:国际标准码,融合多种文字,所有文字都用两个字节表示。
UTF-8:Unicode变种,可自动调整字节数对应字符,最多用3个字节表示一个字符。

----------------------  android培训java培训、期待与您交流!----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值