六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 72|回复: 0

javaio

[复制链接]

升级  44.67%

35

主题

35

主题

35

主题

秀才

Rank: 2

积分
117
 楼主| 发表于 2013-2-3 14:35:52 | 显示全部楼层 |阅读模式
Java中比较丰富的I/O操作,使得Java能够被众多公司接受的一个优势之一。
数据流的概念和技术家奴啊了堆文件I/O的理解、处理以及操作。数据流指一定字节长度和方向的线性有序数据。虽然输入、输出数据都以线性有序字节流的形式存在,但这些数据流的内容可以构成不同文件格式:文本文件、二进制文件、对象文件、压缩文件等等。
Java中的I/0须知道以下内容:
文件的格式、文件内容、数据流方向、文件路径和缓冲。

1.基本知识
stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在
Java的I/O中,所有的stream(包括Input和Out stream)都包括两种类型:
以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字
节为导向的stream包括下面几种类型:
    1) input stream:
        1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
        2) StringBufferInputStream:把一个String对象作为InputStream
        3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
        4) PipedInputStream:实现了pipe的概念,主要在线程中使用
        5) SequenceInputStream:把多个InputStream合并为一个InputStream
    2) Out stream
        1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
        2) FileOutputStream:把信息存入文件中
        3) PipedOutputStream:实现了pipe的概念,主要在线程中使用
        4) SequenceOutputStream:把多个OutStream合并为一个OutStream 以Unicode字符为导向的stream(我个人比较喜欢这个,easy,fast),表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:     1) Input Stream
        1) CharArrayReader:与ByteArrayInputStream对应
        2) StringReader:与StringBufferInputStream对应
        3) FileReader:与FileInputStream对应
        4) PipedReader:与PipedInputStream对应
    2) Out Stream
        1) CharArrayWriter:与ByteArrayOutputStream对应
        2) StringWriter:无与之对应的以字节为导向的stream
        3) FileWriter:与FileOutputStream对应
        4) PipedWriter:与PipedOutputStream对应
以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现
的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的
作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取
一个字节的信息,而后者每次从内存中读取一个字符。
负责字符流和字节流之间转换的工作有InputStreamReader和OutputStreamReader来完成。把一个以字节为导向的stream转换成一个以字符为导向的stream。


stream添加属性:
运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过Fil
terInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子
来说明这种功能的作用。
如果我们要往一个文件中写入数据,我们可以这样操作:
FileOutStream fs = new FileOutStream(“test.txt”);
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如
果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”
的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和Fi
lterOutStream的子类,为FileOutStream添加我们所需要的功能。

FilterInputStream的各种类型
    用于封装以字节为导向的InputStream
       1) DataInputStream:从stream中读取基本类型(int、char等)数据。
       2) BufferedInputStream:使用缓冲区
       3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
       4) PushbackInputStream:很少用到,一般用于编译器开发.
    用于封装以字符为导向的InputStream
       1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
       2) BufferedReader:与BufferedInputStream对应
       3) LineNumberReader:与LineNumberInputStream对应
       4) PushBackReader:与PushbackInputStream对应
FilterOutStream的各种类型
    用于封装以字节为导向的OutputStream
       1) DataIOutStream:往stream中输出基本类型(int、char等)数据。
       2) BufferedOutStream:使用缓冲区
       3) PrintStream:产生格式化输出
    用于封装以字符为导向的OutputStream
       1) BufferedWriter:与对应
       2) PrintWriter:与对应
RandomAccessFile
       1) 可通过RandomAccessFile对象完成对文件的读写操作
       2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
       3) 可以直接跳到文件中指定的位置

2. File
File类是基础类,作为文件操作的对象。既可以是文件,也可以是目录。

(1)四个静态常量:
static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar 与系统有关的路径分隔符。
static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar 与系统有关的默认名称分隔符

其中,pathSeparator作为分隔符来区分不同的路径(在Windows下是;(分号),在Linux下是:(冒号))。separator是路径中使用的分隔符(在Windows下是\,在Linux下是/)。

在File类中有很多有用的方法,可以参考阅读API。但是其中的如下方法要列出来说明下。
String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[] listRoots() 列出可用的文件系统根。


在下面的例子中使用了上面表格中列出的内容。
<div class="dp-highlighter"><div class="bar"><div class="tools">Java代码  
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表