java中的输入、输出流

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/6/261第九章输入、输出流本章导读文件文件字节流和文件字符流缓冲流数组流和字符串流数据流对象流序列化和对象克隆随机读写流使用Scanner类解析文件文件锁2020/6/262输入流、输出流概述I/O流提供一条通道程序,可以使用这条通道读取“源”中的数据,或把数据送到“目的地”。I/O流中的输入流的指向称为源,程序从指向源的输入流中读取源中的数据(如图9.1所示意);输出流的指向称为目的地,程序通过向输出流中写入数据把信息传递到目的地(如图9.2所示意)。程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口。2020/6/263I/O流库提供的4个重要的abstract类Java的I/O流库提供大量的流类(在包java.io中),其中有4个重要的abstract类:InputStream字节输入流Reader字符输入流OutputStream字节输出流Writer字符输出流InputStream和Reader类为其子类提供了重要的读取数据的read()方法.OutputStream和Writer类为其子类提供了重要的写入数据的write()方法。2020/6/2649.1文件多流的读写与文件有关。Java使用File类创建的对象来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等,文件对象并不涉及对文件的读写操作。创建一个File对象的构造方法有3个:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);其中filename是文件名字,directoryPath是文件的路径,f是一个目录。使用File(Stringfilename)创建文件时,该文件被认为是与当前应用程序在同一目录中。2020/6/2651.文件的属性使用File类的下列方法可以获取文件本身的一些信息:◆publicStringgetName()获取文件的名字。◆publicbooleancanRead()判断文件是否是可读的。◆publicbooleancanWrite()判断文件是否可被写入。◆publicbooleanexits()判断文件是否存在。◆publiclonglength()获取文件的长度(单位是字节)。◆publicStringgetAbsolutePath()获取文件的绝对路径。◆publicStringgetParent()获取文件的父目录。◆publicbooleanisFile()判断文件是否是一个正常文件,而不是目录。◆publicbooleanisDirectroy()判断文件是否是一个目录。◆publicbooleanisHidden()判断文件是否是隐藏文件。◆publiclonglastModified()获取文件最后修改的时间(时间是从1970年午夜至文件最后修改时刻的毫秒数。2020/6/2662.目录1)创建目录publicbooleanmkdir()创建一个目录,创建成功返回true,否则返回false。2)列出目录中的文件(如果File对象是一个目录)publicString[]list()用字符串形式返回目录下的全部文件。publicFile[]listFiles()用File对象形式返回目录下的全部文件。File类的下述两个方法可以列出指定类型的文件:publicString[]list(FilenameFilterobj)该方法用字符串形式返回目录下的指定类型的所有文件。publicFile[]listFiles(FilenameFilterobj)该方法用File对象返回目录下的指定类型所有文件。FilenameFilter是一个接口,该接口有一个方法:publicbooleanaccept(Filedir,Stringname);使用list()方法时,需向该方法传递一个实现FilenameFilter接口的对象。list()方法执行时,参数不断回调接口方法accept(Filedir,Stringname),参数name被实例化目录中的一个文件名,参数dir为调用list的当前对象,当接口方法返回true时,list()方法就将目录dir中的文件存放到返回的数组中。2020/6/2673.文件的创建与删除◆对于Filef=newFile(C:\myletter,letter.txt);如果C:\myletter目录中没有名字为letter.txt的文件,文件对象f调用方法publicbooleancreateNewFile()可以在C:\myletter目录中建立一个名字为letter.txt的文件。◆文件对象调用方法publicbooleandelete()可以删除当前文件,如f.delete();例9-1列出了D:\ch9目录下java源文件的名字及其大小,并删除了D:\ch9中的一个java源文件。2020/6/2684.运行可执行文件使用java.lang包中的Runtime类,执行一个本地机上的可执行文件。首先使用Runtime类声明一个对象,如Runtimeec;然后使用该类的静态getRuntime()方法创建这个对象:ec=Runtime.getRuntime();ec可以调用exec(Stringcommand)方法打开本地的可执行文件或执行一个操作。例9-2中,Runtime对象打开Windows平台上的绘图程序和记事本程序。2020/6/2699.2文件字节流1.FileInputStream类FileInputStream类是InputStream的子类,称为文件字节输入流,按字节读取文件中的数据。该类的所有方法都是从InputStream类继承来的。构造方法:FileInputStream(Stringname)FileInputStream(Filefile)构造方法参数指定的文件称为输入流的源,输入流通过使用read()方法从输入流读出源中的数据。建立一个文件输入流对象,代码如下:try{FileInputStreamins=newFileInputStream(myfile.dat);}catch(IOExceptione){System.out.println(e);}read()方法的形式:intread();从输入流中顺序读取单个字节的数据intread(byteb[])和intread(byteb[],intoff,intlen)把多个字节读到一个字节数组中,返回实际读取的字节个数。参数off指定read()方法把数据存放在字节数组b中的位置,参数len指定该方法将读取的最大字节数。FileInputStream流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取文件中其余的内容,直到文件的末尾或流被关闭。2020/6/26102.FileOutputStream类FileOutputStream提供了基本的文件写入能力,是OutputStream的子类,称为文件字节输出流。文件字节输出流按字节将数据写入到文件中.构造方法:FileOutputStream(Stringname)FileOutputStream(Filefile)FileOutputStream(Stringname,booleanappend)FileOutputStream(Filefile,booleanappend)构造方法参数指定的文件称为输出流的目的地。输出流使用write()方法把数据写入输出流到达目的地。publicvoidwrite(byteb[])写b.length个字节到输出流。publicvoid.write(byteb[],intoff,intlen)从给定字节数组中起始于偏移量off处写len个字节到输出流,参数b是存放了数据的字节数组。只要不关闭流,每次调用writer()方法就顺序地向文件写入内容,直到流被关闭例9-3中,首先将“欢迎welcom”写入到文件“hello.txt”中,然后再读取该文件中的内容。2020/6/26119.3文件字符流1.FileReader类FileReader类是Reader的子类,称为文件字符输入流。文件字符输入流按字符读取文件中的数据。构造方法:FileReader(Stringname)FileReader(Filefile)构造方法参数指定的文件称为输入流的源,输入流通过使用read()方法从输入流读出源中的数据。◆intread()输入流调用该方法从源中读取一个字符。该方法返回一个整数(0~65535之间的一个整数,Unicode字符值),如果未读出字符就返回1。◆intread(charb[])输入流调用该方法从源中读取b.length个字符到字符数组b中,返回实际读取的字符数目。如果到达文件的末尾,则返回-1。◆intread(charb[],intoff,intlen)输入流调用该方法从源中读取len个字符并存放到字符数组b中,返回实际读取的字符数目。如果到达文件的末尾,则返回-1。其中,参数off指定该方法从字符数组b中的什么地方存放数据。2020/6/26122.FileWriter类FileWriter提供了基本的文件写入能力。FileWriter类是Writer的子类,称为文件字符输出流。文件字符输出流按字符将数据写入到文件中.构造方法:FileWriter(Stringname);FileWriter(Filefile);FileWriter(Stringname,booleanappend);FileWriter(Filefile,booleanappend);构造方法参数指定的文件称为输出流的目的地。输出流使用write()方法把数据写入输出流到达目的地。publicvoidwrite(charb[])写b.length个字符到输出流publicvoid.write(charb[],intoff,intlen)从给定字符数组中起始于偏移量off处写len个字符到输出流,参数b是存放了数据的字符数组voidwrite(Stringstr)把字符串中的全部字符写入到输出流voidwrite(Stringstr,intoff,intlen)从字符串str中起始于偏移量off处写len个字符到输出流只要不关闭流,每次调用writer()方法就顺序地向文件写入内容,直到流被关闭例9-4首先用字符输出流向一个已经存在的文件尾加若干个字符,然后再用字符输入流读出文件中的内容。2020/6/26139.4缓冲流(教材印刷错误9.5)1.BufferedReader类BufferedReader类创建的对象称为缓冲输入流,该输入流的指向必须是一个Reader流,称为BufferedReader流的底层流,底层流负责将数据读入缓冲区。BufferedReader流的源就是这个缓冲区,缓冲输入流再从缓冲区中读取数据。可以将BufferedReader与FileReader连接,然后BufferedReader就可以按行读FileReader指向的文件。BufferedReader的构造方法如下:BufferedReader(Readerin)BufferedReader流能够读取文本行,方法是readLine()可以向BufferedReader传递一个Reader对象(如FileReader的实例)来创建一个BufferedReader对象:FileReaderinOne=newFileReader(Student.txt)BufferedReaderinTwo=newBufferedReader(inOne);然后inTwo调用readLine()顺序读取文件“Student.txt”的一行。2020/6/26142.BufferedWriter类可以将BufferedWriter流和FileWriter流连接在一

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功