首页 > 代码库 > Java基础之IO流

Java基础之IO流

IO流用来处理设备间数据传输,java对数据的操作是通过流的方式,而这些操作流的对象被封装在IO包中。流可以分为字符流和字节流。字符流可以设置编码方式,这就使得处理文本更加方便。

IO常用基类

字节流抽象基类InputStream,OutputStream。字符流抽象基类Reader,Writer。

?

字符流体系

抽象基类Writer

共性方法:write();flush();close();append()

子类FileWriter

用于写入文件。该类对象一被初始化就要指定被操作的文件。write方法将数据写入流,flush方法刷新流,close刷新并关闭流。

抽象类基类 Reader

共性方法:read();skip();reset();ready()

子类FileReader

用于读取文件。对象初始化时要指定被读取的文件。read()方法将数据读入流。

?

IO异常处理IOException

?

流对象fw要放在try块外面声明,在内部初始化,以便在finally中能访问到;fw只有不为null时才能调用close方法,所以需要有判断。

字符流的缓冲区

字符流的缓冲区提高了IO的效率,需要结合流才能使用,在流的基础上对流的功能进行了增强。对应的类为BufferedReader和BufferedWriter。

BufferedWriter

将文本写入字符输出流,缓冲各个字符,从而提供单字符,字符数组,字符串的高效写入。所以,在创建缓冲区之前要现有流对象,只要把流对象加入构造函数,再调用缓冲区的写入方法即可。

BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符,数组,行的高效读出。

子类LineNumberReader

跟踪行号的缓冲字符输出流,通过setLineNumber和getlLineNumber方法可以设置和获取当前行号。

?

字节流体系

抽象基类OutputStream

共性方法:write();flush();close();

子类FileOutputStream

用于写入文件。该类对象一被初始化就要指定被操作的文件。write方法将数据写入流,flush方法刷新流,close刷新并关闭流

抽象类基类 InputStream

共性方法:read();skip();reset();ready()

子类FileInputStream

用于读取文件。对象初始化时要指定被读取的文件。read()方法将数据读入流,available()返回可以读到的字节数。

字节流的缓冲区

对应的类为BufferedOutputStream和BufferedInputStream

BufferedOutputStream

该类实现缓冲的输出流,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,不必针对每次字节写入调用底层系统。

BufferedInputStream

同字符流缓冲区相同。

?

读取转换流

InputStreamReader类将字节流转换为字符流。它指定字符集来读取字节并解码成字符。为了达到高效率,可以考虑在BufferedReader内包装InputStreamReader。

写入转换流

OutputStreamWriter类将字符流转换为字节流。可以指定字符集来编码成字节。为了达到高效率,可以考虑在BufferedWriter内包装OutputStreamWriter。

?

输入流操作时应明确源----桥梁(符节转换)----缓冲,输出流操作应明确目的------桥梁(符节转换) ------缓冲。

?

Flie类

用来将文件或文件夹封装成对象,方便对文件和文件夹操作,也可以作为参数传递给流的构造函数。

常用方法:

  • 创建
    • createNewFile();创建新文件,如存在则返回false
    • createTempFile(prefix,suffix)静态方法,根据指定前缀后缀创建临时文件
    • mkdir();mkdirs();创建目录
  • 删除
    • delete();删除文件
    • deleteOnExit();JVM终止时请求删除此文件或目录。
  • 判断

canExcute();canRead();canWrite();exist();isDirectory();isFile()

  • 获取信息
    • getname();getPath();getParent();getAbsolutePath();length()
    • list(dir);获取目录下文件名称数组
    • listFiles(dir);获取文件对象数组

?

properties类

该类是集合中与IO相结合的集合容器,是hashtable的子类,即具备map集合的特点,且键值对都是字符串。该类对象可以用于键值对形式的配置文件。

  • setProperties(str,str);getProperties(str)读取设置属性
  • load()加载字节流或者字符流1.6版本后
  • Set<string> stringPropertyNames()返回属性列表中的键集合

?

打印流

字节输出流PrintStream类

作为outputStream的子类,为其他输出流添加了功能,使它们能打印各种数值表示形式。将各种数据都原样打印。可以直接操作文件,它的构造函数接受file对象,文件路径,字节输出流。

字符输出流PrintWriter类

它的构造函数可以接受file对象,文件路径,字节输出流outputstream,字符输出流Writer

SequenceInputStream

将多个输入流合并成一个输入流。

对象的序列化

实现堆内存中数据对象的存取,需要用到ObjectOutputStream和ObjectInputStream类来实现,也称为对象的持久化或对象的序列化。

类通过实现接口serializable来启用它的序列化功能。类中的静态成员变量是不能被序列化的,因为静态成员变量并不在堆内存中存储,而是存储在内存方法区中。非静态成员如果加上transient关键字修饰,则也可以不被序列化。

管道流

通过管道流输入和输出可以直接连接,通过结合线程使用,需要用到PipledOutputStream和PipledInputStream类来实现.

管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有输入字节。通常情况下,数据由某个线程从PipledInputStream对象读取,并由其他线程写入到对应PipledOutputStream对象中去。

随机访问文件

RandomAccessFile类的对象能对文件进行随机的读写操作,内部封装了byte数组,通过指针对数组操作。通过getFilePointer()获取指针位置,通过seek改变指针位置。

Java基础之IO流