File:用于文件,文件夹,磁盘操作管理的类,路径管理,建立文件夹mkdir,文件,删除文件夹,文件,是比较传统的文件操作。File.separator产生与平台无关的分隔符。
RandomAccessFile:随机读取文件,用于基本的读写,读取指定文件位置的内容,很类似标准c中的函数,支持读写模式,和偏移量skipbyte,seek。操作较麻烦,一般用流类来代替。
程序中输入输出都是以流的形式完成,输入数据用输入流,输出数据用输出流。
字节流:输入流InputStream 输出流OutputStream
字符流:输入流Reader输出流Writer
步骤:
1.用File指定对象
2.使用字节流和字符流,指定位置,和功能,用装饰者模式完成流链接
3.读写操作
4.关闭流
字符流比字节流慢,因为字符流用到了一个缓冲区,而且最终都是以字节流完成操作的。
字节流 | 字符流 | |||||
抽象接口 | 输入流 | 输出流 | 输入流 | 输出流 | ||
InputStream ( System.in ) | OutputStream | Reader | Writer | |||
子类 | 被装饰者(表示目的地) | 文件流(文件操作) | FileInputStream | FileOutputStream | FileReader | Writer |
内存流(以内存为操作点) | ByteArrayInputStream | ByteArrayOuputStream | ||||
管道流(线程间通讯) | PipedInputStream | PipedOutputStream | ||||
打印流(任意类型,任意格式的输出) | PrintStream ( Systeam.out , System.err ) | PrintWriter | ||||
装饰者(表示功能) | 转换流(将字节流转换成字符流) | InputStreamReader | OutputStreamWriter | |||
缓冲流(缓冲区大小可变内容可变) | BufferedInputStream | BufferedOutputStream | BufferReader | BufferWriter | ||
数据流(平台无关性,格式化) | DataInputStream | DataOutputStream | ||||
对象流(对象序列化,反序列化) | ObjectInputStream | ObjectOutputStream |
内存操作流,以内存操作点,不是以程序为操作点。内存操作很像c中的sprintf。
System.out in err通过控制台输入输出,使用重定向,可以更好使用这些对象。
BufferedReader是比System.in更好的,输入中文的流。缓冲区的大小,内容是可以改变的。可以读取一行数据readline
Scanner更好的完成BufferedReader的功能,并且对数据进行验证。注意分隔符。
合并流SequenceInputStream用把两个InputStream合并在一起。
java.util.zip包中提供了关于zip的流和类。
对象流这玩意在写数据库或者写游戏存档记录的时候,肯定很好用。