121、stream根据功能可分为数据侦听器流(data sink stream,侦听器:内存、管道、文件)和进程流
(processing stream)
122、在谈java的流类之前,先谈如何生成一个file对象,它时一个和流无关的类。file对象可用来生成
和文件(及其所在的路径)或目录结构相关的对象,由于不同的系统可能会有不同的目录结果表示法,使
用file可完成和系统无关的目的(使用抽象的路径表示法)。
123、file对象生成方法:
file(string path):将一个代表路径的字符串转换为抽象的路径表示法
file(string parent,string child):parent代表目录,child代表文件,child不可为空
file(file parent,string child):parent代表一个file对象的目录,child代表文件,child不
可为空
124、file提供一些方法来测试或检查一个file对象:
boolean exists():若该文件或目录存在,则返回true
boolean isdirectory():若为目录则返回true
file[] listfiles():得到该对象所代表的目录下的file对象数组,若不为该目录,则返回null
string[] list():同上,但返回一个string数组
long length():得到和该对象相关的文件的大小,若不存在,则返回值为0l
string tostring():得到抽象路径表示法
string getparent():得到抽象路径表示法的目录部分(不包含最后一个部分)
string getname():得到抽象路径表示法的最后一个部分
125、改变一个file对象的方法:
boolean renameto(file newname):将目前file对象所代表的路径名改为newname所代表的路径名
。若更改成功,则返回值为true
boolean mkdir():生成一个新的目录。入成功,则返回值为true
boolean mkdirs():生成一个新的目录,包含不存在的子目录。若成功,返回值为true
boolean delete():删除目前file对象所代表的文件或目录,若是目录,则需为空的。若成功,
返回true
126、没有参数的listfiles()会列出所有的文件名。使用file[] listfiles(filenamefilter filter)过
滤某些特殊的扩展名或包含某些字符的文件名。filenamefilter是一个接口,必须生成一个实现它的类来
负责过滤文件名,该类需取代filenamefilter惟一的方法accept()。boolean accept(file dir,string
name),若返回为true则会将目前检查的文件包含在listfiles()的返回数组内。
127、字节流的构造函数:
fileinputstream(string name):打开文件name用以读取数据
fileinputstream(file file):打开和file对象file相关联的文件,用以读取数据
fileoutputstream(string name):打开文件name用以写入数据
fileoutputstream(file file):打开和file对象file相关联的文件,用以写入数据
fileoutputstream(string name,boolean append):打开文件name用以写入数据,若append为
true,则写入的数据会加到原有的文件后。
128、字节数组(byte array)的构造函数:
bytearrayinputstream(byte[] buffer):生成一个字节数组的输入流,并指定一个字节数组
buffer为此输入流的流缓冲区。
bytearrayoutputstream():生成一个字节数组的输出流,其缓冲区的默认初始大小为32字节,若
有需要,缓冲区的大小会随之增加
bytearrayoutputstream(int size):同上,但分配size字节的初始大小给缓冲区。
129、一些bytearrayoutstream常用的方法:
int size():返回此流缓冲区的大小
byte[] tobytearray():生成一个新的字节数组,并将流的内容复制到此自己数组。
string tostring():将流的内容转换为string对象。
130、文件的合并:sequenceinputstream
sequenceinputstream(inputstream head,inputstream tail):生成一个新的输入流,先读入
head,后是tail
sequenceinputstream(enumeration enum):将enum内的流根据序合并韦一个新的输入流,enum内
必须是inputstream对象。
131、vector的功能就像一个数组,但它能根据需要来改变大小。
132、管道(pipe)提供一种线程间通信的方法,可由于ipc(inter-process communication,进程间通
信)或是itc(inter-thread communication,线程间通信),但它无法执行不同主机之间的通信。
133、一个输入管道是用来接收一个输出管道所写出的数据,因此,一个线程会负责送出
(pipedoutputstream对象)数据,而另一个线程需负责接收(pipedinputstream对象)这些数据。
134、管道的数据流(data flow)是单向的,需要生成另一组输入和输出管道来负责另一个方向的数据传
送。
135、如果要将管道输出流的数据送到管道输入流,可使用
pipedoutputstream(pipedinputstream pipein)或
connect(pipedinputstream pipein)
140、字符流的类:1),bufferedreader是一种过滤器(filter)(extends filterreader)。过滤器用
来将流的数据加以处理再输出。构造函数为:
bufferedreader(reader in):生成一个缓冲的字符输入流,in为一个读取器
bufferedreader(reader in,int size):生成一个缓冲的字符输入流,并指定缓冲区的大小为
size
常用的方法为:
string readline():读入一行的文字(以\n或\r结尾),返回的string对象并不包含\n或\r,若
已达流的末端则返回null
当使用缓冲流的read()或readline()读取数据时,先会尝试从缓冲区读取,若缓冲区中并没有数
据,则会尽可能的将数据读入缓冲区中,以留待后续的读取。
141、2),linenumberreader也是一种过滤器,而它也是一种缓冲流(extends bufferedreader),可用
来记录读入的行数,这里所谓的一行时以\n或\r结尾。常用方法:
int getlinenumber():得到目前的行数。
142、3),printerwriter也是一种过滤器(extendes filterwriter),可用来将输出导入某种设备。
143、i/o流的一个特点是它们能经过流链接的方式结合在一起,每个流类会执行特殊的工作再将结果传到
下一个链接,可使用过滤器将流链接在一起。
bufferedreader inbuffer=new bufferedreader(new filereader(infile));
使用流链接时,只需要关闭最外层的链接流,其他链接的流会自动关闭。可以使用的链接是最后一个流(
inbuffer),此时,我们并无法直接使用filereader流。如果写成:
filereader filein=new filereader(infile);
bufferedreader inbuffer=new bufferedreader(filein);
此时,filein仍存在,这可能会因写程序的疏忽而造成同时有两个流链接导同一个来源(infile),这往
往会有潜在的危险。
144、随机存取:randomaccessfile,构造函数
randomaccessfile(file file,string mode):其中mode是用来指定存取的模式,可为r,w或rw
randomaccessfile(string name,string mode):name为和系统相关的文件名字
常用方法:
读取:boolean readboolean();byte readbyte();char readchar();double readdouble
();float readfloat();int readint();long readlong();short readshort();string readline()
写入:void writebyte(byte v);void writebyte(string s);void writechar(char v);void
writechars(string s);void writedouble(double v);void writefloat(float v);void writeint(int
v);void writelong(long v);void writeshort(short v)
与目前文件位置有关的方法:
void seek(long pos):将文件指针移到pos(不可为负)的位置这是相对于文件初始位置的值(
初始值为0)
long getfilepointer():得到目前文件指针的位置。
long length():得到文件的长度
145、文件压缩及解压缩方法:zipinputstream(extends inflaterinputstream)和zipoutputstream
(extends deflateroutputstream)
146、将文件写入zip文件的步骤:
1)生成和所要生成的zip文件相关联的zipoutputstream对象
2)一个zip文件往往不只含有一个压缩文件,我们将每个要加入的文件称为一个zip入口,我们
使用zipentry(string filename)来生成这些zipentry对象。
3)使用putnextentry(zipentry entry)将此zip入口加入zip文件
4)将文件内容写入此zip文件
5)使用closeentry()结束目前的zip入口,继续下一个zip入口
147、将压缩文件从zip文件读出的步骤:
1)生成和所要读入的zip文件相关联的zipinputstream对象
2)利用getnextentry()得到下一个zip入口
148、我们将对象存取自一个流称为序列化(serialization),为了完成对象的序列化(将一个对象写导
流称为序列化(serializing),而从一个流将对象读出称为反序列化(deserializing))。
149、存取的对象需满足下列条件:
类需为public
类需实现serializable接口
若有数据不是可序列化的或不需要写出,则需将其声明为transient
150、java.io提供objectinputstream和objectoutputstream来存取对象,由于它们和datainputstream及
dataoutputstream有共同的接口,因此它们也可使用相同的方法来读取或写入数据。还有其他的方法:
void writeobject(object obj):用于objectoutputstream,将对象写入流
object readobject():用于objectinputstream,将对象由流读出。
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




