《输入输出流 学习.pptx》由会员分享,可在线阅读,更多相关《输入输出流 学习.pptx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、9.1 I/O基本原理(二)3 3、JAVAJAVA中流的概念?(必须理解)一种抽象的数据类型;拥有长度(元素的个数);流所处的当前位置(任意时刻的唯一存取点)流的存取方式(只读、只写或读写)。第1页/共39页9.2 文件及文件I/O思考:如何用Java实现新建文件夹及重命名等功能?利用java.io.File类9.2.1 File类(重点内容)File类提供独立于平台的文件处理方法。File类的构造函数:(熟练掌握)public File(Sting path);public File(Sting path,String name);public File(File dir,String n
2、ame);第2页/共39页File类主要方法1 1判断文件路径和属性 getPath()方法返回File对象的路径。getAbsolutePath()方法返回File对象的绝对路径。getName()方法返回File对象的文件名或目录名。注意:getPath()和getName()之间的区别getPath()返回路径名,即创建File对象时所用参数。getName()返回具体的目录或者文件名。若参数中不包含路径分隔符,则两者返回相同的字符串。第3页/共39页File类判断文件属性或状态的方法(了解即可)exist(),canWrite(),canRead(),isFile(),isDirect
3、ory(),isAbsolute()Java不能查询隐藏、系统、归档等属性。Why?第4页/共39页File类主要方法2创建目录和删除文件 mkdir()和mkdirs()/创建目录delete()/删除文件或目录,删除目录时,应该保证所删目录是一个空目录,否则删除操作失败。3文件更名 renameTo()方法不但可以给文件更名,而且可以给目录更名。equals()判断两个File对象是否相等,程序用它来判断用户给定的原文件名和新文件名是否相等,如果相等则不能进行更名操作。第5页/共39页File类主要方法4目录清单 list()方法产生目录清单,它只返回指定目录中包含的文件名或子目录名,没有
4、文件长度、修改时间、文件属性等信息。lastModified()返回文件最后一次被修改的时间,其值是相对于1970年1月1日的时间毫秒数,为了便于阅读,必须变成java.util.Date对象。说明:File类不允许访问文件内容,即读写文件;也不能改变文件的属性。第6页/共39页File类示例import java.io.*;public class FileOperation public static void main(String args)try BufferedReader in=new BufferedReader(new InputStreamReader(System.in)
5、;String sdir=d:temp;String sfile;File Fdir1=new File(sdir);if(Fdir1.exists()&Fdir1.isDirectory()System.out.println(“目录”+sdir+“已经存在。);for(int i=0;i Fdir1.list().length;i+)System.out.println(Fdir1.list()i);File Fdir2=new File(d:temp,temp1);if(!Fdir2.exists()Fdir2.mkdir();第7页/共39页System.out.println();S
6、ystem.out.println(“创建新目录后的文件列表:);for(int i=0;i Fdir1.list().length;i+)System.out.println(Fdir1.list()i);System.out.println(“请输入文件名:);sfile=in.readLine();File Ffile=new File(Fdir1,sfile);if(Ffile.isFile()System.out.println(“文件”+Ffile.getName()+“的长度是”+Ffile.length()+“字节。);catch(Exception e)System.out.
7、println(e.toString();第8页/共39页9.2.2 RandomAccessFile类1 1、构造函数(熟练掌握)public RandomAccessFile(String name,String mode)throws IOException;public RandomAccessFile(File file,String mode)throws IOException;mode-mode-读写模式:rr表示文件以只读方式打开,rwrw表示文件以读写方式打开。第9页/共39页RandomAccessFile类 注意:以读写方式生成RandomAccessFile对象时如果
8、该文件不存在,则创建该文件;如果该文件已经存在,则以覆盖方式把输出数据写入到文件中;原文件中没有被覆盖的部分,仍然保留在文件之中。第10页/共39页RandomAccessFile类RadomAccessFile类实现了DataInput和DataOutput两个接口,这两个接口分别定义了读入和写出的方法。DataInput接口独有的方法:skipBytes()在输入流中跳过n个字节 readUnsignedByte()读入一个无符号字节数据 readLine()读入一行字符。有四种行结束符:回车符r,新行符n,回车符后紧跟新行符,或者文件结束。读入的一行字符中包含行结束符。第11页/共39页
9、RandomAccessFile常见写入方法write+write+不同的后缀:分别为Byte,Short,Int,Long,Byte,Short,Int,Long,Float,Double,Char,BooleanFloat,Double,Char,Boolean。对于用这些方法写出的数据,应该用带有相同后缀的读入方法来读取数据,否则可能出错。特例:writeBoolean()writeBoolean()方法,写出数据时用0 0表示falsefalse,用1 1表示true;true;用readBoolean()readBoolean()读入数据时,如果是0 0,则返回falsefalse,
10、非0 0返回truetrue。第12页/共39页字符串写入文件(了解)三种方法与字符串的写出有关:1.1.writeBytes()writeBytes():每个字符占一个字节。2.2.writeChars()writeChars():每个字符占2 2个字节,即1616位。3.3.writeUTF()writeUTF():以8 8位编码的方式写出字符串。前两个字节,表示以后将要写出数据的字节总数。例如:writeUTF(abc)writeUTF(abc),则其结果用十六进制表示为:00h,03h,61h,62h,63h00h,03h,61h,62h,63h。第13页/共39页不带后缀的写入方法三
11、个不带任何后缀的写入方法,按字节写数据。write(int b);write(int b);write(byte b);write(byte b);write(byte b,int off,int len);write(byte b,int off,int len);其参数的含义为:b b 一个字节数据或字节数组。off off 表示从数组中第几个字节开始写出数据。len len 表示写出字节的总数。第14页/共39页RandomAccessFile示例import java.io.*;public class TextFileLineNo public static void main(St
12、ring args)throws IOException RandomAccessFile f=new RandomAccessFile(TextFileLineNo.java,r);long lineNo=0,filePointer=0,length=f.length();while(filePointer=9)System.out.print(+lineNo+:);System.out.println(str);else System.out.print(+lineNo+:);System.out.println(str);filePointer=f.getFilePointer();第1
13、5页/共39页9.3 字节流主要目标:了解:InputStream,OutputStream,Reader,Writer基本功能其中InputStream,OutputStream是字节流。Reader,Writer是字符流。重点:掌握文件输入输出流类FileInputStream,FileOutputStream,以及过滤器流类,Buffered、Data第16页/共39页结构图(了解)ObjectRandomAccessFileInputStreamWriterOutputStreamFileReaderFileOutputStreamFilterOutputStreamPipeOutpu
14、tStreamFileInputStreamFilterInputStreamPipeInputStreamSequenceInputStream第17页/共39页字节流(了解)第18页/共39页文件输入输出流类1FileInputStream类 它有三个构造函数:(前两种需熟练掌握)public FileInputStream(File file);public FileInputStream(File file);public FileInputStream(String name);public FileInputStream(String name);public FileInputS
15、tream(FileDescriptor fdObj);public FileInputStream(FileDescriptor fdObj);第19页/共39页FileInputStreamFileInputStream主要读入方法FileInputStreamFileInputStream类覆盖了InputStreamInputStream类的read()read()方法,它们都是按字节读入数据:public int read()throws IOException;public int read(byte b)throws IOException;public int read(byt
16、e b,int off,int len)throws IOException;第20页/共39页FileInputStreamFileInputStream示例:显示文件import java.io.*;class FileType public static void main(String args)if(args.length!=1)System.err.println(Use:java FileType);System.exit(-1);File file=new File(args0);try FileInputStream in=new FileInputStream(file);
17、int c;int i=0;while(c=in.read()-1)if(char)c=n)i+;第21页/共39页FileInputStreamFileInputStream示例:显示文件 System.out.print(char)c);in.close();System.out.flush();System.out.println(nnn-);System.out.println(File +args0+Lines:+i);catch(FileNotFoundException e)System.err.println(file+is not found);catch(IOExcepti
18、on e)e.printStackTrace();第22页/共39页FileOutputStream类构造函数 public FileOutputStream(String name)throws IOException;public FileOutputStream(String name,boolean append)throws IOException;public FileOutputStream(File file)throws IOException;注意:生成FileOutputStream对象时,如果文件不存在,则有完全改写和附加两种输出数据的方式:除第二种构造函数,其余均是改
19、写。第二个构造函数中,appendappend参数为truetrue表示附加方式,falsefalse表示改写方式。第23页/共39页过滤器流类(了解内容)FilterInputStream类的子类BufferedInputStream类DataInputStream类FilterOutputStream类的子类BufferedOutputStream类DataOutputStream类第24页/共39页BufferedInputStream构造函数public BufferedInputStream(InputStream in);public BufferedInputStream(Inp
20、utStream in,int size);第25页/共39页9.4字符流:Reader和WriterInputStream类和OutputStream类及其子类,读写流内数据时以字节为单位。Reader类和Writer类及其子类,读写流内数据时以字符为单位。两种流类中定义的方法的种类和参数大致相同。例如:public int read(byte b,int off,int len);public int read(char b,int off,int len);第26页/共39页字符流第27页/共39页FileReader示例import java.io.*;class TestNodeSt
21、ream public static void main(String args)throws IOException String s;BufferedReader in;in=new BufferedReader(new FileReader(TestNodeStream.java);while(s=in.readLine()!=null)System.out.println(s);第28页/共39页BufferedReader示例import java.io.*;public class ConvertStream public static void main(String args)
22、throws IOException String s;BufferedReader in=new BufferedReader(new InputStreamReader(System.in);while(s=in.readLine()!=null)System.out.println(Read:+s);第29页/共39页9.5 管道输入输出流1、什么是管道?始于UNIX提供线程间(ITC)或者进程间(IPC)的通信方法2、JAVA中的管理技术实现用PipedInputStream类和PipedOutputStream类实现。两者必须同时使用。第30页/共39页管道连接步骤(掌握)有两种方法
23、方法一(使用不带参数的构造器):建立输入流PipedInputStream pipedinputstream=new PipedInputStream();建立输出流PipedOutputStream pipedoutputstream=new PipedOutputStream();将输入输出连接起来pipedinputstream.connect(pipedoutputstream);或者pipedoutputstream.connect(pipedinputstream);第31页/共39页管道连接步骤(掌握)方法二(使用带参数的构造器):直接建立连接PipedInputStream p
24、is=new PipedInputStream();PipedOutputStream pos=new PipedOutputStream(pis);或PipedOutputStream pos=new PipedOutputStream();PipedInputStream pis=new PipedInputStream(pos);第32页/共39页9.6 对象串行化对象串行化的主要步骤:1、定义可以用流处理的类implements Serializable例:import java.io.*;class MySer implements Serializable int x,y;Stri
25、ng s;public MySer(int a,int b,String str)x=a;y=b;s=str;public String toString()return (+x+,+y+,+s+);第33页/共39页9.6 对象串行化2、创建节点输入输出流FileInputStream fi=new FileInputStream(first.dat);FileOutputStream fo=new FileOutputStream(second.dat);第34页/共39页9.6 对象串行化3、创建对象处理流ObjectInputStream和ObjectOutputStreamObjec
26、tInputStream ois=new ObjectInputStream(fi);ObjectOutputStream oos=new ObjectOutputStream(fo);第35页/共39页9.6 对象串行化4、从流中读写对象mySer obj1=new mySer(0,0,Hello);oos.writeObject(obj1);mm obj2=(mySer)ois.readObject();第36页/共39页9.6 对象串行化示例(写入对象)class TestMySerWrite public static void main(String args)throws IOEx
27、ception MySer obj=new MySer(0,0,Hello);FileOutputStream fo=new FileOutputStream(my.dat);ObjectOutputStream oos=new ObjectOutputStream(fo);oos.writeObject(obj);第37页/共39页9.6 对象串行化示例(读出对象)class TestMySerRead public static void main(String args)throws IOException,ClassNotFoundException FileInputStream fi=new FileInputStream(my.dat);ObjectInputStream ois=new ObjectInputStream(fi);MySer obj=(MySer)ois.readObject();System.out.println(obj.x=+obj.x);System.out.println(obj.y=+obj.y);System.out.println(obj.s=+obj.s);第38页/共39页感谢您的观看!第39页/共39页
限制150内