您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 5.7JavaIO课堂笔记
JavaIO的所有操作类都放在java.io包中主要的类和接口有5个:File、InputStream、OutputStream、Reader、Writer一、字节流和字符流(重点)流:代表任何有能力产生数据的数据源对象或者有能力接收数据的接收端对象。在整个java的IO包中,流的操作分为两种:字节流字节输出流OutputStream、字节输入流InputStream字符流(1个字符=2个字节)字符输出流Writer、字符输入流ReaderInputStream作用是用来表示从不同的数据源产生输入的类。这些数据源可以是:文件、数据库、网络连接、管道。OutputStream的作用:决定了输出要去往的目标:文件、数据库、管道、网络连接IO操作的基本步骤:1、使用File类找到文件Filefile=newFile(Strings);2、使用字节流或者字符流的子类为OutputStream、InputStream、Writer、Reader进行实例化。3、进行读或者写的操作4、释放连接close()1.1字节输出流OutputStreamJavaio操作中字节输出流的最大父类。类定义:publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable此类是个抽象类,不能直接实例化,所以在使用的时候要依靠子类进行实例化。如果此时要完成文件操作,使用FileOutputStream子类为OutputStream抽象父类实例化。子类FileOutputStream定义:publicclassFileOutputStreamextendsOutputStream构造方法:publicFileOutputStream(Filefile,Booleanflag)throwsFileNotFoundException需要接收一个File对象创建一个指定的File对象来表示文件向其中写入数据。通过FileOutputStream子类来为OutputStream实例化。OutputStream提供了三个写入数据的方法publicvoidwrite(byte[]b)throwsIOExceptionpublicvoidwrite(byte[]b,intoff,intlen)throwsIOExceptionpublicabstractvoidwrite(intb)throwsIOException例1:向文件中写入字符串importjava.io.*;publicclassFileOutputStreamTest01{publicstaticvoidmain(String[]args){try{Filef=newFile(d:+File.separator+test.txt);//找到要操作的文件OutputStreamos=null;os=newFileOutputStream(f);//使用子类为父类实例化Stringstr=信捷科技;//要写入的信息byte[]b=null;b=str.getBytes();os.write(b);os.close();}catch(Exceptione){e.printStackTrace();}}}例2一个字节一个字节的写入importjava.io.*;publicclassFileOutputStreamTest02{publicstaticvoidmain(String[]args){try{Filef=newFile(d:+File.separator+test.txt);//找到要操作的文件OutputStreamos=null;os=newFileOutputStream(f,true);//使用子类为父类实例化Stringstr=中国你好\r\n;//要写入的信息byte[]b=null;b=str.getBytes();for(inti=0;ib.length;i++)os.write(b[i]);os.close();}catch(Exceptione){e.printStackTrace();}}}1.2字节输入流InputStreampublicabstractclassInputStreamextendsObjectimplementsCloseable抽象类,需要依靠子类为其实例化。使用InputStream可以读取输入流的内容。publicabstractintread()throwsIOExceptionpublicintread(byte[]b)throwsIOException例1:importjava.io.*;classTest01{publicstaticvoidmain(String[]args){Filefile=newFile(d:+File.separator+test.txt);try{InputStreamis=newFileInputStream(file);byte[]b=newbyte[100];is.read(b);is.close();}catch(Exceptione){System.out.println(没有此文件);}}}importjava.io.*;publicclassFileInputStreamTest01{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(d:+File.separator+test.txt);InputStreamis=null;is=newFileInputStream(file);byte[]b=newbyte[(int)file.length()];for(inti=0;ib.length;i++)b[i]=(byte)is.read();System.out.println(newString(b));is.close();}}2.1字符输出流Writer定义:publicabstractclassWriterextendsObjectimplementsAppendable,Closeable,Flushable抽象类,主要功能是完成字符流的输出。publicvoidwrite(Stringstr)throwsIOException可以直接向目标写入字符串,不需要进行任何转换了。例1:以字符方式向文件中写入数据importjava.io.*;publicclassFileWriterTest01{publicstaticvoidmain(String[]args){try{Filef=newFile(d:+File.separator+aa.txt);//找到要操作的文件Writerw=null;w=newFileWriter(f);//使用子类为父类实例化Stringstr=天气晴朗;//要写入的信息w.write(str);w.close();}catch(Exceptione){e.printStackTrace();}}}2.2字符输入流Reader方法:publicintread()throwsIOExceptionpublicintread(char[]cbuf)throwsIOException例1:挨个读取read()importjava.io.*;publicclassFileReaderTest01{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(d:+File.separator+test.txt);Readerreader=null;StringBuildersu=newStringBuilder();reader=newFileReader(file);inttemp=0;//接收reader读到的内容,一个字符一个字符的读while((temp=reader.read())!=-1)su.append((char)temp);System.out.println(su);reader.close();}}总结:这四个IO操作的类是整个javaio操作的精华类,一定要反复的练习。四个类都是抽象类,在使用的时候都需要依靠子类来为其进行实例化。抽象类之规定了操作标准,具体的实现使用子类完成,这也就是java面向对象的设计思想。字节流和字符流比较而言,字符流使用了缓冲区,必须调用close()方法将缓冲区中的内容写入到文件中。在网络传输或者在硬盘保存的内容都是以字节形式存在的。所以字节流的操作使用比较多,但是在处理中文的时候字符流比较好用。文件复制importjava.io.*;publicclassFileCopyTest{publicstaticvoidmain(String[]args)throwsException{if(args.length!=2){System.out.println(语法不正确,输入要拷贝的文件路径);System.out.println(例如:javaTest01源文件路径目标文件路径);System.exit(1);}if(args[0].equals(args[1])){System.out.println(无法复制自己);System.exit(1);}Filefile1=newFile(args[0]);//找到要复制的文件对象if(file1.exists()){Filefile2=newFile(args[1]);//找到目标文件InputStreaminput=null;OutputStreamoutput=null;input=newFileInputStream(file1);output=newFileOutputStream(file2);inttemper=0;while((temper=input.read())!=-1){output.write(temper);//写入数据}System.out.println(文件复制成功);}else{System.out.println(源文件不存在);}}}多态调用实例:importjava.util.*;abstractclassFruit{publicabstractvoidcanEat();}classAppleextendsFruit{publicvoidcanEat(){System.out.println(【苹果】可以吃);}}classOrangeextendsFruit{publicvoidcanEat(){System.out.println(【桔子】可以吃);}}classPearextendsFruit{publicvoidcanEat(){System.out.println(【鸭梨】可以吃);}}classGenFruit{privatestaticRandomrand=newRandom(47);publicstaticFruitgen(){switch(rand.nextInt(3)){case0:returnnewApple();case1:returnnewOrange();case2:returnnewPear();default:returnnull;}}}publicclassCastTest01{publicvoidwhoCanEat(Fruitf){f.canEat();}publicstaticvoidmain(String[]args){CastTest01c=newCastTest01();for(inti=0;i10;i++)c.whoCanEat(GenFruit.gen());}}2.2打印流使用OutputStream可以完成数据的输出,但是要输出的数据是float、double等类型时则不太方便,javaio包中提供了一个打印流打印流分为:Print
本文标题:5.7JavaIO课堂笔记
链接地址:https://www.777doc.com/doc-2893192 .html