IO包中的其他类Word下载.docx

上传人:b****6 文档编号:17545795 上传时间:2022-12-07 格式:DOCX 页数:14 大小:627.61KB
下载 相关 举报
IO包中的其他类Word下载.docx_第1页
第1页 / 共14页
IO包中的其他类Word下载.docx_第2页
第2页 / 共14页
IO包中的其他类Word下载.docx_第3页
第3页 / 共14页
IO包中的其他类Word下载.docx_第4页
第4页 / 共14页
IO包中的其他类Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

IO包中的其他类Word下载.docx

《IO包中的其他类Word下载.docx》由会员分享,可在线阅读,更多相关《IO包中的其他类Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

IO包中的其他类Word下载.docx

(2)PrintWriter在web中应用很多。

服务器端向客户端发来就用PrintWriter。

(3)实例:

publicclassPrintWriterTest{

publicstaticvoidmain(String[]args)throwsIOException{

BufferedReaderbufr=newBufferedReader(newInputStreamReader(System.in));

PrintWriterpw=newPrintWriter(newFileWriter("

e:

\\rrr.txt"

),true);

Stringline=null;

while((line=bufr.readLine())!

=null){

if("

over"

.equals(line))

break;

pw.println(line.toUpperCase());

System.out.println(line.toUpperCase());

}

bufr.close();

pw.close();

}

}

(4)

4.

二、序列流(操作多个流对象)

1.SequenceInputStream对多个流进行合并

2.将切割后的文件合并时,需要对每个切割文件都有一个输出流,利用序列流操作这些输出流。

3.concatenation[kənkæ

tə'

neɪʃn]

n.串联,连结

4.实例:

publicclassSequenceTest{

Vector<

FileInputStream>

ve=newVector<

();

ve.add(newFileInputStream("

\\111.txt"

));

\\112.txt"

\\113.txt"

Enumeration<

en=ve.elements();

SequenceInputStreamsis=newSequenceInputStream(en);

FileOutputStreamfos=newFileOutputStream("

\\kkk.txt"

);

byte[]buf=newbyte[1024];

intlen;

while((len=sis.read(buf))!

=-1){

fos.write(buf,0,len);

fos.close();

sis.close();

5.集合转成枚举,通过工具包中提供的静态方法:

Collections中有个方法enumeration方法,返回一个Enumeration。

三、文件切割:

1.代码:

packagelianxi;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.IOException;

publicclassSpiltFile{

privatestaticfinalintSIZE=1024*1024;

//下午4:

50:

11

Filefile=newFile("

\\G.E.M.邓紫棋-泡沫.mp3"

spiltFile(file);

privatestaticvoidspiltFile(Filefile)throwsIOException{

51:

51

FileInputStreamfis=newFileInputStream(file);

byte[]buf=newbyte[SIZE];

Filedir=newFile("

\\parts\\partppp"

FileOutputStreamfos=null;

if(!

dir.exists()){

dir.mkdirs();

intlen=0;

intcount=1;

while((len=fis.read(buf))!

fos=newFileOutputStream(newFile(dir,"

切割文件"

+(count++)+"

.part"

//可以把目录与具体文件封装在一起

fis.close();

2.

四、切割和合并文件:

packagelianxi;

importjava.io.SequenceInputStream;

importjava.util.ArrayList;

importjava.util.Collections;

importjava.util.Enumeration;

heBing(dir);

//下面是合并文件

privatestaticvoidheBing(Filedir)throwsIOException{

ArrayList<

arrlist=newArrayList<

for(inti=1;

i<

5;

i++){

arrlist.add(newFileInputStream(newFile(dir,"

+i+"

)));

en=Collections.enumeration(arrlist);

FileOutputStreamfos=newFileOutputStream(newFile("

\\hebing.mp3"

byte[]buffer=newbyte[1024];

while((len=sis.read(buffer))!

=-1){

fos.write(buffer,0,len);

//下面是切割文件

2.对切割和合并文件进行优化:

切割文件时,需要记录原文件的名称(包括格式),以及切割文件的个数,以便合并时回复到原来的文件。

利用Properties文件记录。

importjava.io.FilenameFilter;

importjava.util.Properties;

 

publicclassAdcancedSpiltHebingTest{

privatestaticfinalintSIZE=1024*512;

\\小苹果.mp4"

//获取配置信息文件,可能不存在或者多个,这些都是不合法的,只能有一个,提高程序的健壮性

File[]files=dir.listFiles(newsuffixFilenameFilter("

.properties"

if(files.length!

=1)

thrownewRuntimeException("

配置文件个数不对,没有或者有多个"

Filemanifile=files[0];

//获取此配置信息文件

Propertiespro=newProperties();

FileInputStreamfis=newFileInputStream(manifile);

pro.load(fis);

Stringfilename=pro.getProperty("

filename"

intcount=Integer.parseInt(pro.getProperty("

subfilecount"

//获取切割文件

File[]files2=dir.listFiles(newsuffixFilenameFilter("

if(files2.length!

=count){

切割文件个数不对"

=count;

FileOutputStreamfos=newFileOutputStream(newFile(dir,filename));

fos.close();

pro.setProperty("

file.getName());

Integer.toString(count-1));

myProperties"

+"

pro.store(fos,"

fileinfo"

//定义一个名字过滤器

classsuffixFilenameFilterimplementsFilenameFilter{

Stringsuffix;

publicsuffixFilenameFilter(Stringsuffix){

this.suffix=suffix;

publicbooleanaccept(Filedir,Stringname){

returnname.endsWith(suffix);

五、操作对象ObjectInputSteam与ObjectOutputStream

被操作的对象需要实现接口Serializable(标记接口)。

写Object时即写一个对象时,这个对象所属类必须实现接口Serializable,实现对象序列化,否则会出现异常NotSerializableException-Someobjecttobeserializeddoesnotimplementthejava.io.Serializableinterface.

读写对象的意义:

使对象的生命周期延长,存到硬盘中,需要时直接从硬盘中直接读取出来。

一般这样的文件的扩展名为.object。

1.写对象:

ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream(newFile("

\\obj.object"

oos.writeObject(newAnimal());

//Animal必须实现接口Serializable

oos.close();

2.读对象:

//对象的反序列化

ObjectInputStreamois=newObjectInputStream(newFileInputStream(newFile("

Animalani=(Animal)ois.readObject();

//向下转型

System.out.println(ani.getName()+"

"

+ani.getAge());

3.对象中的静态成员变量,不是对象的特有内容,不会被写入。

当然读取的时候也不是上次的值了,而是默认值。

4.transient['

træ

nzɪənt]n.瞬变现象;

过往旅客;

候鸟

adj.短暂的;

路过的

5.利用transient修饰一个变量,可以实现此变量不会被序列化。

publictransientStringname;

privatetransientintage;

六、接口Serializable介绍;

存在的意义:

用于给被序列化的类加入ID号,用于判断类和对象是否是同一个版本。

显式序列化:

privatestaticfinallongserialVersionUID=54453;

七、RandomAccessFile

1.不是IO体系的子类;

2.既能读又能写;

随机,文件(包含文本文件和媒体文件);

3.该对象内部维护了一个byte数组,并通过指针可以操作数组中的元素;

4.可以通过getFilePoint方法获取指针的位置,且可以通过seek方法设置指针的位置,通过指定指针的位置,就可以实现随机读取。

随机性就是由seek来完成的。

可以直接设置指针位置,然后写入数据,就可以修改原来的数据。

5.其实该对象就是将字节输入流和输出流进行了封装;

6.构造方法:

通过构造方法可以看出,该对象的源和目的只能是文件。

mode只有四种:

7.如果文件不存在,就会创建一个文件,如果文件已经存在,就不会再次创建,这是与一般的IO输出流不同的地方。

一般的输出流无论存在不存在都会直接创建一个新的文件,若原来存在,直接覆盖原文件。

8.有很多readXxx方法和writeXxx方法。

八、管道流:

PipedInputStream和PipedOutputStream

输入输出可以直接进行连接,通过结合线程使用。

适用于多线程。

九、其他类

(2)操作字节数组的ByteArrayInputStream和ByteArrayOutputStream的源和目的都是内存(字节数组),继承与InputStream和OutputStream。

字符串可以通过方法getByte方法转换成字节数据。

特点:

关闭两者没有作用,仍然可以调用。

因为没有调用底层资源,只是在内存中使用。

不会抛出IOException,因为只操作内存。

(3)

一十、装饰模式:

基本的OutputStream和InputStream,可以被一些具有特定功能的流进行装饰,完成特定功能的操作。

所以输出流和输入流OutputStream和InputStream是有的,一般都是被装饰的。

(如果是字符操作,可以直接利用Writer和Reader,这四个流都是直接继承Object的。

一十一、编码表

1.

3.现在简体中文版都是用的是GBK编码表。

UTF是Unicode转换格式。

4.使用最多的是GBK和Unicode.

一十二、编码和解码

1.字符串----》字节数组称为编码。

看懂的到看不懂的。

2.字节数组-------》字符串称为解码。

看不懂的到看懂的。

一十三、练习题:

UTF-8中只有Ascii码不是负值,其他的是负值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1