java文件流的基础入门文档格式.docx

上传人:b****4 文档编号:18391615 上传时间:2022-12-16 格式:DOCX 页数:23 大小:22.67KB
下载 相关 举报
java文件流的基础入门文档格式.docx_第1页
第1页 / 共23页
java文件流的基础入门文档格式.docx_第2页
第2页 / 共23页
java文件流的基础入门文档格式.docx_第3页
第3页 / 共23页
java文件流的基础入门文档格式.docx_第4页
第4页 / 共23页
java文件流的基础入门文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

java文件流的基础入门文档格式.docx

《java文件流的基础入门文档格式.docx》由会员分享,可在线阅读,更多相关《java文件流的基础入门文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

java文件流的基础入门文档格式.docx

);

//bos输出流有个默认的缓冲区,大小为32个字节

bis=newBufferedInputStream(

newFileInputStream("

c:

\\[高清在线]海底总动员DVD中英字幕.rmvb"

//bis输入流有个默认的缓冲区,大小为32个字节

byte[]buf=newbyte[1024];

intlen=bis.read(buf,0,1024);

//一定要注意,这不是从buf中读数据,而是从bis所关联到的D:

\\综艺\\电影\\猫和老鼠\\CD4.rmvb文件中读取数据,并将读取的数据写入bis自己的默认缓冲区中,然后再将缓冲区的内容写入buf数组中,每次最多向buf数组中写入1024个字节,返回实际写入buf数组的字节个数,如果读到了文件的末尾,无法再向buf数组中写入数据,则返回-1

while(-1!

=len)

{

bos.write(buf,0,len);

//不是写入buf数组,而是将buf数组中下标从0开始的到len-1为止的所有数据写入bos所关联到的"

d:

/share/OutputView.txt"

文件中

len=bis.read(buf);

//bis.read(buf);

等价于bis.read(buf,0,buf.length);

}

bos.flush();

bis.close();

bos.close();

}

catch(FileNotFoundExceptione)

System.out.println("

没有找到文件!

"

);

System.exit(-1);

catch(IOExceptione)

文件读写错误!

System.out.println("

文件复制成功!

}

}

本程序读写速度要慢于"

TestBufferedInputStreamOutputStreamCopy.java"

程序

即:

publicclassTestBufferedInputStreamOutputStreamCopy_2

FileOutputStreambos=null;

FileInputStreambis=null;

bos=newFileOutputStream("

bis=newFileInputStream("

利用BufferedReader和BufferedWriter完成文本文件的复制

publicclassTestBufferedReaderWriterCopy

BufferedReaderbr=null;

BufferedWriterbw=null;

br=newBufferedReader(

newFileReader("

C:

\\DocumentsandSettings\\others\\桌面\\java\\TestBufferedReaderWriterCopy.java"

);

bw=newBufferedWriter(

newFileWriter("

/share/Writer.txt"

Stringstr=null;

while(null!

=(str=br.readLine()))//br.readLine()读取一行字符,但会将读取的换行符自动丢弃,即返回的String对象中并不包括换行符

bw.write(str);

bw.newLine();

//写入一个换行符这行不能省

bw.flush();

e.printStackTrace();

finally

try

bw.close();

br.close();

catch(IOExceptione)

e.printStackTrace();

System.exit(-1);

}

功能:

把一个long类型的数据写入byte数组中,然后再从byte数组中读取出

这个long类型的数据

因为网络编程中经常要把数值型数据存入byte数组中然后打包成

DatagramPacket经过网络传输到目的机,目的机再从byte数组中

把原数值型数据还原回来

目的:

ByteArrayOutputStreamDataOutputStreamByteInputStreamDataInputStream流的使用

记住:

DataOutputStream流中的writeLong(longn)是把n变量在内存

中的二进制代码写入该流所连接到的设备中

注意:

查API文档得知:

构造ByteArrayOutputStream对象时不需要也不能指定缓冲数组,因为缓冲数组默认已经内置好了

构造ByteArrayInputStream对象时必须的指定缓冲数组是谁!

publicclassTestByteArrayOutputStream1

publicstaticvoidmain(Stringargs[])throwsException

longn=9876543210L;

ByteArrayOutputStreambaos=newByteArrayOutputStream();

//9行API:

publicByteArrayOutputStream():

创建一个新的byte数组输出流。

缓冲区的容量最初是32字节,如有必要可增加其大小。

"

//9行代码一旦执行完毕,意味着两点:

1、在内存中生成了一个大小为32个字节的byte数组2、有一根叫做baos的管道已链接到了该byte数组中,并且可以通过这个管道向该byte数组中写入数据

//虽然此时可以通过baos向baos所连接到的在内存中分配好的byte数组中写入数据,但是ByteArrayOutputStream流并没有提供可以直接把long类型数据直接写入ByteArrayOutputStream流所连接到的byte数组中的方法,简单说我们没法通过baos向baos所连接到的byte数组中写入long类型的数据,查API文档可以发现:

ByteArrayOutputStream流中并没有类似writeLong()这样的方法,但是DataOutputStream流中却有writeLong()writeFloat()等方法

DataOutputStreamdos=newDataOutputStream(baos);

dos.writeLong(n);

//把n变量所代表的10000L在内存中的二进制代码写入dos所依附的baos管道所连接到的内存中的大小为32字节的byte数组中,由运行结果来看,这是二进制写入,既不是把10000L转化为字符'

1'

'

0'

写入byte数组中,而是把10000L在内存中的总共8个字节的二进制代码写入byte数组中

dos.flush();

byte[]buf=baos.toByteArray();

//DataOutputStream流中并没有toByteArray()方法,但是ByteArrayOutputStream流中却有toByteArray()方法,所以不可以把baos改为dos,否则编译时会出错!

ByteArrayOutputStream流中toByteArray()方法的含义,摘自API“创建一个新分配的byte数组。

其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中”

//利用ByteArrayInputStream和DataInputStream可以从byte数组中得到原long类型的数值10000L

ByteArrayInputStreambais=newByteArrayInputStream(buf);

DataInputStreamdis=newDataInputStream(bais);

longl=dis.readLong();

l="

+l);

dos.close();

在JDK1.6中的运行结果是:

----------------

l=9876543210

功能:

将long类型数据写入byte数组,然后在从byte数组中把该数据读出来

publicclassTestByteArrayOutputStream2

publicstaticvoidmain(String[]args)throwsException

longn=1234567;

ByteArrayInputStreambis=newByteArrayInputStream(buf);

DataInputStreamdis=newDataInputStream(bis);

longn2=dis.readLong();

n2="

+n2);

dis.close();

2009年2月4日14:

13:

46

利用FileInputStream和FileOutputStream可以完成所有格式文件的赋值

因为字节是不需要解码和编码的,将字节转化为字符才存在解码的问题

本程序完成了视频文件的复制

publicclassTestFileInputStreamOutputStreamCopy

FileInputStreamfi=null;

FileOutputStreamfo=null;

fi=newFileInputStream("

E:

\\综艺\\歌曲\\妹妹来看我.mp3"

fo=newFileOutputStream("

/share/Output.txt"

//Output.txt用暴风影音打开

intch;

=(ch=fi.read()))

fo.write(ch);

文件没有找到!

catch(IOExceptione)

if(null!

=fi)

{

fi.close();

fi=null;

}

=fo)

{

fo.close();

fo=null;

catch(Exceptione)

}

2008年12月3日10:

19:

57

利用FileReader流来读取一个文件中的数据,并在显示器上输出!

publicclassTestFileReader

FileReaderfr=null;

fr=newFileReader("

\\DocumentsandSettings\\others\\桌面\\java\\TestFileReader.java"

intcnt=0;

=(ch=fr.read()))//20行

System.out.print((char)ch);

//System.out.print(intch);

这是在显示器上输出ch的整数值,所以必须的进行类型转化,我们需要输出的是ch所代表的整数对应的字符

++cnt;

System.out.printf("

总共从TestFileReader.java文件中读取了%d个字符"

cnt);

找不到文件!

文件读取失败!

26:

39

本程序证明了FileReader和FileWriter只可以完成文本文件的复制,

却无法完成视频格式文件的复制

publicclassTestFileReaderWriterCopy

FileReaderfi=null;

FileWriterfo=null;

fi=newFileReader("

fo=newFileWriter("

//Output.txt用暴风影音打开失败!

本程序证明了FileWriter和FileReader无法完成视频文件的赋值,实际上FileWriter和FileReader只能完成文本文件的复制

publicclassTestObjectIO

ObjectOutputStreamoos=null;

ObjectInputStreamois=null;

Studentss=newStudent("

zhansan"

1000,88.8f);

//注意88.8f不能改为88.8

Studentss2=null;

FileOutputStreamfos=newFileOutputStream("

/share/java/ObjectOut.txt"

oos=newObjectOutputStream(fos);

oos.writeObject(ss);

ois=newObjectInputStream(newFileInputStream("

));

ss2=(Student)ois.readObject();

//(Student)不能省ois.readObject();

如果ois中的某个成员是transient,则该成员是不会被读取的,因为该成员不会被保存,何来读取之说?

ss2.sname="

+ss2.sname);

ss2.sid="

+ss2.sid);

ss2.sscore="

+ss2.sscore);

catch(Excepti

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

当前位置:首页 > 解决方案 > 学习计划

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

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