java文件流的基础入门文档格式.docx
- 文档编号:18391615
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:23
- 大小:22.67KB
java文件流的基础入门文档格式.docx
《java文件流的基础入门文档格式.docx》由会员分享,可在线阅读,更多相关《java文件流的基础入门文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
);
//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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 文件 基础 入门