java的I/O流--个人总结(上)怎么又回过头来看I/O流操作呢?温故知新嘛,况且以后我的研究方向都会涉及带内存和多线程的操作,I/O与这些太有关联了!其实我写这个的个人总结的初衷并不是这样,是在学习Struts2的文件上传和下载操作时遇到了一些小问题。
一下是我的'个人总结:
java.io.包内的类真是太多了,简直是排山倒海!但是其中许多类都是装饰类,采用的装饰着模式。所以我们一定要熟悉各种类之间的层次结构!
java.io.File类:这是对文件本身进行操作的构造方法:public File(String pathname)
创建文件对象的方法:f对象.createNewFile()其返回值是一个boolean值
还有其他一些常用方法:f.delete(),f.mkdir().
其中全局常量pathSeparator的路径分隔符,显示了java的可移植性强大的特点
2.RandomAccessFile类对文件内容进行操作的随机读取类
构造方法:public RandomAcessFile(文件对象模式)会抛出异常
3.字节流
字节流有OutputStream和InPutStream,但是他们都是抽象类,必须通过子类开实例化对象,然后对byte数组进行操作。如实操作文件,可以使用其子类FileOutPutStream类,通过向上转型,可以为OutPutStream实例化。
方法有:OutPutStream的对象.write(byte|b单个字节)写入到输出流中去;InputStream的方法和OutPutStream是一样的对象.read(|byte)将对象InputStream流中的数据读进数组,或者返回一个int值是否读完。要强调的是最后都要close()关闭字节流!
4.字符流
1个字符是2字节是2Byte其单位是大于字节流的字符输出流Writer和字符输入流Reader,他们的操作基本和字节流类似的
但是区别是:字节流操作不会使用到缓冲区(内存),而字符流操作需要使用!
5.转换流
OutputStreamWrite(Writer的子类):xxxx--字符流--字节流
InputStreamReader(Reader的子类):文件--字节流--字符流
6.内存操作流
以上讲解的程序中的输出和输入都是从文件中来的,当然也可以将输入的位置设置在内存上
使用ByteArrayStreamInputStream,ByteArrayOutPutStream完成输入输出。和字节流字符流一样,操作对象都可以看成是Stream流。
构造方法ByteArrayInputStream(byte buf)只使用构造方法将内容读取到内存中去
构造方法ByteArrayOutPutStream()创建对象,将内容写入bos流中:bos.write(int b)
bos.write(bis.read()):以bis读出再写入bos中。然后str=bos.toString 7.管道流
PipedOutputStream和PipeIntputStream使用时,还要使用Connect()方法将两个流连接起来。
pos.connect(pis);