java IO学习心得.docx
《java IO学习心得.docx》由会员分享,可在线阅读,更多相关《java IO学习心得.docx(41页珍藏版)》请在冰豆网上搜索。
javaIO学习心得
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
javaIO学习心得
publicstaticvoidmain(String[]args){Filefile=newFile(“E:
/tmp/test.txt”);//传入
路径,实例化file对象try{file.createNewFile();//创建新文件}catch(IOException
e){e.printStackTrace();}将在E:
\tmp中创建一个test.txt的文件(该文件大小为
0byte)。
注意:
在传入路径的时候要么使用“/”,要么使用”\\”表示一个斜杠。
public
staticvoidmain(String[]args){Filefile=newFile(“E:
”+File.separator+“tmp”+
File.separator+“test.txt”);if(file.exists()){if(file.delete()){System.out.println(“文件删
除成功!
”);}else{try{if(file.createNewFile()){System.out.println(“文件创建成
功!
”);}catch(IOExceptione){e.printStackTrace();从程序的运行结果可以发现,所
有的操作并不会立即执行,因为java是通过JVM与底层进行交互的,因此所有的
操作都必须经过JVM,因此有可能产生延迟。
publicstaticvoidprint(Filefile){//
该方法被递归调用if(file!
=null){//判断对象是否为空if(file.isDirectory()){File[]
files=file.listFiles();//列出全部的文件if(files!
=null){//因为有一些文件是操作系
统不允许访问的for(Filefile2:
files){print(file2);//递归调用}else{
System.out.println(file);RandomAccessFile类:
publicRandomAccessFile(String
name,Stringmode)throwsFileNotFoundExceptionpublicRandomAccessFile(File
file,Stringmode)throwsFileNotFoundException“r”以只读方式打开。
调用结果对象
的任何write方法都将导致抛出IOException。
“rw”打开以便读取和写入。
如
果该文件尚不存在,则尝试创建该文件。
“rws”打开以便读取和写入,对于
“rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
“rwd”打开以便读取和写入,对于“rw”,还要求对文件内容的每个更新都同步写
入到底层存储设备。
publicstaticvoidmain(String[]args)throwsIOException{File
file=newFile(“E:
”+File.separator+“tmp”+File.separator+“test.txt”);
RandomAccessFilerdf=newRandomAccessFile(file,“rw”);//读写模式,文件不存在
则创建之Stringname=null;intage=0;name=“zhangsan”;//字符串长度为8字节
age=30;//整数的长度为4字节rdf.writeBytes(name);rdf.writeInt(age);name=“lisi
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
“;age=31;rdf.writeBytes(name);rdf.writeInt(age);name=“wangwu“;age=32;
rdf.writeBytes(name);rdf.writeInt(age);rdf.close();//关闭publicstaticvoid
main(String[]args)throwsIOException{Filefile=newFile(“E:
”+File.separator+
“tmp”+File.separator+“test.txt”);RandomAccessFilerdf=newRandomAccessFile(file,
“r”);//只读模式Stringname=null;intage=0;byte[]b=newbyte[8];//开辟比特数
组//读取第二个人的信息rdf.skipBytes(12);//跳过第一个人的信息for(inti=0;i
b.length;i++){b[i]=rdf.readByte();//读取一个字节name=newString(b);//将读取
出来的比特数组变为字符串age=rdf.readInt();System.out.println(“第二个人的信息
-”+”姓名:
”+name+“年龄:
”+age);//读取第一个人的信息rdf.seek(0);//指针回到
文件的开头for(inti=0;ib.length;i++){b[i]=rdf.readByte();name=newString(b);
age=rdf.readInt();System.out.println(“第一个人的信息-”+”姓名:
”+name+“年龄:
”
+age);//读取第三个人的信息rdf.skipBytes(12);//此时文件指针位于第一个人的末尾
for(inti=0;ib.length;i++){b[i]=rdf.readByte();//读取一个字节name=new
String(b);age=rdf.readInt();System.out.println(“第三个人的信息-”+”姓名:
”+name
+“年龄:
”+age);rdf.close();//关闭以上的代码操作起来比较复杂,可以通过
javaio中的流来操作使其简便。
字节流和字符流什么是流?
在程序中所有的数
据都是以流的方式进行传输或者保存的,程序需要数据的时候要使用输入流读取数
据,而当程序需要将一些数据保存起来的时候,就需要使用输出流来完成。
InputStream、OutputStream、Writer和Reader都是抽象类。
IO操作属于资源操作,
操作完成之后必须关闭,否则容易出现未知错误。
字节流操作的是比特类型的数
据,以byte数组为准,主要操作类就是OutputStream(字节输出流)、InputStream
(字节输出流)整个IO包中字节输出流的最大父类,该类是一个抽象类,如果想
要使用此类,则必须通过子类实例化对象。
publicstaticvoidmain(String[]args)
throwsIOException{//1.使用File类找到一个文件Filefile=new
File(“E:
”+File.separator+”tmp”+File.separator+”test.txt”);//2.通过父类实例化对象
FileOutputStreamfos=newFileOutputStream(file);//3.进行写操作(byte数组)String
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
info=“不悔梦归处,只恨太匆匆!
”;byte[]b=info.getBytes();//将String转化为byte
数组fos.write(b);//4.关闭输出流fos.close();运行结果:
Stringinfo=“不悔梦归
处,只恨太匆匆!
”;byte[]b=info.getBytes();//将String转化为byte数组for(inti=
0;ib.length;i++){fos.write(b[i]);//每次只写入一个字节}如果文件不存在则创建
之,如果文件存在则覆盖之。
如果想要进行追加的话,需要使用FileOutPutStream
的另一个构造方法:
publicFileOutputStream(Filefile,booleanappend)如果想要字符
串换行将字符串改变成如下:
//1.使用File类找到一个文件Filefile=new
File(“E:
”+File.separator+”tmp”+File.separator+”test.txt”);//2.通过父类实例化对象
FileInputStreamfis=newFileInputStream(file);//3.进行读操作byte[]b=new
byte[1024];fis.read(b);//4.关闭输出流fis.close();System.out.println(“内容是:
”+new
String(b));文件没有几行,但是输出的结果中却有大量的空格,问题就在于我们开
辟了一个1024大小的区域。
修改以上程序为以下:
//1.使用File类找到一个文件
Filefile=newFile(“E:
”+File.separator+”tmp”+File.separator+”test.txt”);//2.通过父类实
例化对象FileInputStreamfis=newFileInputStream(file);//3.进行读操作byte[]b=
newbyte[1024];intlen=fis.read(b);//4.关闭输出流fis.close();System.out.println(“长
度:
”+len);System.out.println(“内容是:
”+newString(b,0,len));运行结果:
改正程
序后一切正常了。
但是以上的代码还存在问题:
文件明明很小,但是却开辟了1024
字节肯定很浪费,能不能根据文件的大小开辟数组空间呢?
//1.使用File类找到一
个文件Filefile=newFile(“E:
”+File.separator+”tmp”+File.separator+”test.txt”);//2.通
过父类实例化对象FileInputStreamfis=newFileInputStream(file);//3.进行读操作
byte[]b=newbyte[(int)file.length()];//数组的大小由文件大小决定intlen=fis.read(b);
//4.关闭输出流fis.close();System.out.println(“长度:
”+len);System.out.println(“内容
是:
”+ne