Java I/O系统
File类
- 它既能代表一个特定文件,又能代表一个目录
- 可以用File对象创建新目录或者文件,还可以查看文件特性,并且删除他们
输入和输出
- 流这个抽象概念代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。流 屏蔽了实际I/O设备中处理数据的细节
- InputStream或者Reader派生而来的类都有read()方法,用于读取单个字节或者字节数组;OutputStream或Writer派生而来的类都有write()方法,用于写单个字节或者字节数组
Reader和Writer
- 他们提供兼容Unicode与面向字符的I/O功能
- 两个适配器InputStreamReader把InputStream转换成Reader;OutputStreamWriter把OutputStream转换成Writer
自我独立的类
- RandomAccessFile在1.4中大多数功能由nio取代
典型的使用方式
- 缓冲输入文件:BufferedReader>>>FileReader>>>file
- 从内存输入:StringReader
- 格式化的内存输入:DataInputStream>>>ByteArrayInputStream
- 基本文件输出:PrintWriter>>>BufferedWriter>>>FileWriter>>>file
- 恢复和存储数据:如果我们一DataOutputStream写入数据,Java保证可以使用DataInputStream准确的读取数据,无论平台多么不同
- 复杂数据结构的读取方式应该使用对象序列化和XML
标准I/O
- 按照标准I/O模型,Java提供了System.in,System.out,System.err
- System.in是一个没有被包装过的未经加工的InputStream,而其他两个被包装成了printStream
- setIn(InputStream),setOut(PrintStream),setErr(PrintStream)用于重定向
- 重定向操纵的是字节流,不是字符流
新I/O
- 旧的I/O包已经使用nio重新实现过
压缩
对象序列化
- 方法:创建某些OutputStream对象>>>封装在一个ObjectStream对象内>>>调用writeObject即可序列化对象>>>将其发送给OutputStream
- java的对象序列化似乎没有什么缺点,请尽量不要自己动手
XML
- 对象序列化只是Java的解决方案,更具互动性的解决方案是将数据转换为XML格式,这可以被各种平台和语言使用
Preferences
- 用于存储和读取用户的偏好以及程序配置项的设置