输入输出流与文件操作课件_第1页
输入输出流与文件操作课件_第2页
输入输出流与文件操作课件_第3页
输入输出流与文件操作课件_第4页
输入输出流与文件操作课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章输入输出流与文件操作第八章输入输出流与文件操作目录

输入输出流的分类目录和文件管理文件的随机访问其他常用的流字符流字节流目录输入输出流的分类目录和文件管理文件的随机访问其他常输入输出流的分类

Java流的概念Java使用流(stream)来执行输入输出(I/O)的功能,流是一种数据的源头和目的之间的通信途径。

标准输入输出Java系统事先定义好两个流对象,分别与系统的标准输入和标准输出相联系,它们是System.in和System.outSystem是Java中一个功能很强大的类,利用它可以获得很多Java运行时的系统信息。

3132输入输出流的分类Java流的概念3132输出流(程序写出数据)

输入流(程序读入数据)

Java中根据流操作的种类可分为:字节流和字符流。根据流的方向,流可分为两类:输入流和输出流。Java流类体系结构1

Java流类体系结构2Java流类体系结构3

Java流类体系结构4

——Java流的概念输入输出流的分类输出流(程序写出数据)输入流(程序读入数据)Java中根【例8.1】标准输入输出举例。——标准输入输出输入输出流的分类importjava.io.*;publicclassIODemo{publicstaticvoidmain(Stringargs[])throwsIOException{intb;intcount=0;while((b=System.in.read())!=-1){count++;System.out.print((char)b);}System.out.println();System.out.println("programend");}}运行结果:输入:a,b,c,d输出:a,b,c,d输入:^Z输出:programend【例8.1】标准输入输出举例。——标准输入输出输入输出流目录和文件管理

32文件名的处理31File类文件或目录的生成文件属性测试普通文件信息和工具目录操作◆publicFile(Stringpath):如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File对象表示的是文件。◆publicFile(Stringpath,Stringname):path是路径名,name是文件名(不可为空)。◆publicFile(Filedir,Stringname):dir是路径名,name是文件名。◆StringgetName():得到一个文件的名称(不包括路径)。◆StringgetPath():得到一个文件的路径名。◆StringgetAbsolutePath():得到一个文件的绝对路径名。◆StringgetParent():得到一个文件的上一级目录名。◆StringrenameTo(FilenewName):将当前文件名更名为给定文件的完整路径。【例8.2】◆booleanexists():测试当前File对象所指示的文件或目录是否存在,若存在,返回True。◆boolean

createNewFile():创建当前文件。◆booleancanWrite():测试当前文件是否可写。◆booleancanRead():测试当前文件是否可读。◆booleanisFile():测试当前文件是否是文件(不是目录)。◆booleanisDirectory():测试当前文件是否是目录,若为目录则返回True。【例8.3】◆longlastModified():得到文件最近一次修改的时间。◆longlength():得到文件的长度,以字节为单位,若不存在,返回0。◆booleandelete():删除File对象代表的文件或目录,目录需为空。删除成功,返回True。◆booleanmkdir():生成一个由该对象指定的路径(新目录),若成功,返回True。◆booleanmkdirs():生成一个新的目录,包含子目录。若成功,返回true。◆booleanrenameTo(FilenewName):将当前File对象所代表的路径名改为newName所代表的路径名。若成功,返回true。◆Stringlist():列出当前目录下的文件。【例8.4】File类的应用【例8.5】【例8.6】目录和文件管理32文件名的处理31File类文件或目录字节流

缓冲区流BufferedInputStream和BufferedOutputStream33顺序读/写文件(FileInputStream与FileOutputStream)31ByteArrayInputStream和ByteArrayOutputStream32字节流缓冲区流BufferedInputStream和Bu顺序读/写文件(FileInputStream与FileOutputStream)⑴FileInputStream类从磁盘文件读取数据。常用的构造方法有:◆FileInputStream(Stringname):打开文件name用来读取数据。如:FileInputStreamf=newFileInputStream("c:/test.txt");◆FileInputStream(Filefile):打开文件file用来读取数据。如:Filef=newFile("c:/test.txt");FileInputStreamf1=newFileinputStream(f);⑵FileOutputStream类创建文件(如果文件不存在),并将数据写入文件。FileOutputStream类常用的构造方法有:◆FileOutputStream(Stringname):打开文件name用来写入数据。如:FileOutputStreamf=newFileOutputStream("c:/test.txt");◆FileOutputStream(Filefile):打开文件file用来写入数据。如:Filef=newFile("c:/test.txt");FileOutputStreamf1=newFileOutputStream(f);◆FileOutputStream(Stringname,Booleanappend):打开文件name用来写入数据,若append为true,则写入的数据会加到原有文件后面,否则,覆盖原有的文件。如:FileOutputStreamf=newFileOutputStream("c:/test.txt",true);字节流

顺序读/写文件(FileInputStream与FileOu字节流【例8.7】将FileIO.java复制为FileExam.java.bak。importjava.io.*;publicclassFileIO{publicstaticvoidmain(Stringargs[]){FileInputStreaminFile=null;FileOutputStreamoutFile=null;try{inFile=newFileInputStream("FileIO.java");outFile=newFileOutputStream("FileExam.java.bak");intdata;while((data=inFile.read())!=-1){outFile.write(data);}

}catch(FileNotFoundExceptione){System.out.println(e.getMessage());}catch(IOExceptione){System.out.println(e.getMessage());}finally{if(inFile!=null){try{inFile.close();}catch(IOExceptione){}}if(outFile!=null){try{outFile.close();}catch(IOExceptione){}}

}}}程序运行结果【解题分析】以下问题的求解过程可分解如下:①先打开文件FileExam.java②用read()将其内容逐字节读取出来(如果返回值为-1,则表明已到达文件尾端)③再用write()将读出的字节逐一写入另一个文件FileExam.java.bak中④若文件无法打开(例如FileExam.java不存在)或无法生成(FileExam.java.bak),则抛出FileNotFoundException异常,若读写出错,则抛出IOException异常。⑤最后,在finally中关闭文件。字节流【例8.7】将FileIO.java复制为FileEx在使用FileInputStream类时,若关联的目录或者文件不存在,Java会抛出一个IOException异常。程序可以使用try-catch块检测和处理捕捉到的异常。为了把一个文件输入流对象与一个文件关联起来,可以使用下列的代码段来处理Java产生的IOEception异常。

例如:try{FileInputStreamfis=newFileInputStream("java.txt");…}catch(IOExceptione){System.out.println("FileException:"+e);}注:字节流

在使用FileInputStreaByteArrayInputStream和ByteArrayOutputStream字节流

⑴ByteArrayInputStream将字节数组用作源,并在该数组中执行读操作。它有两种构造方法。第一种构造方法将字节数组作为参数。◆ByteArrayInputStream(byte[]buffer):生成一个字节数组的输入流,并指定一个字节数组buffer为此输入流的流缓冲区。如:ByteArrayInputStreamb=newByteArrayInputStream(buf[]);另外一种构造方法是从指定的字节数组来创建。◆ByteArrayinputStreamb=newByteArrayinputStream(buf[],off,len);其中off是要读取的第一个字节的偏移,len是要读取数组的字节数;⑵ByteArrayOutputStream有2种构造方法。◆ByteArrayOutputStream():生成一个字节数组的输出流,其缓冲区的默认初始大小为32字节,若有需要,缓冲区的大小会随之增加。如:ByteArrayOutPutStreamb=newByteArrayOutputStream();◆ByteArrayOutputStream(intsize):创建32个字节的缓冲器用于储存数据,但分配size字节的初始大小给此缓冲区。如:ByteArrayOutputStreamb1=newByteArrayOutputStream(size);创建大小为size的缓冲器⑶ByteArrayOutputStream的一些常用方法:◆intsize():返回此流缓冲区的大小。◆byte[]toByteArray():生成一个新的字节数组,并将流的内容复制到此字节数组。◆StringtoString():将流的内容转换为String对象。ByteArrayInputStream和ByteArray【例8.8】程序读入文件ByteIO.java,将其内容写入内存中(一个字节数组),接着转换为String对象。字节流importjava.io.*;importjava.util.*;publicclassByteIO{publicstaticvoidmain(Stringargs[]){try{FileinFile=newFile(“ByteIO.java");FileInputStreaminData=newFileInputStream(inFile);ByteArrayOutputStreamdataArray=newByteArrayOutputStream();intdata;while((data=inData.read())!=-1){dataArray.write(data);}inData.close();StringdataStr=dataArray.toString();}catch(IOExceptione){System.out.println(e.getMessage());}}}【例8.8】程序读入文件ByteIO.java,将其内容写入字节流

缓冲区流BufferedInputStream和BufferedOutputStream⑴BufferedInputStream类的构造方法和方法:◆BufferedInputStream(InputStreamin):构造一个BufferedInputStream。◆BufferedInputStream(InputStreamin,intsize):构造一个具有给定的缓冲区大小的BufferedInputStream。◆intavailable():得到可以从这个输入流读取的字节数。◆voidclose():关闭流。◆intread():读取数据的字节。◆intread(byte[]b,intoff,intlen):从这个字节输入流的给定偏移量处开始读取字节,存储到给定的字节数组。◆voidreset():将缓冲区重新设置到加标记的位置。◆longskip(longn):跳过n个字节的数据。⑵BufferedOutputStream类的构造方法和方法:◆BufferedOutputStream(OutputStreamout):构造一个BufferedOutputStream。◆BufferedOutputStream(OutputStreamout,intsize):构造一个具有给定的缓冲区大小的BufferedOutputStream。◆voidflush():刷新这个流。◆voidwrite(byte[]b,intoff,intlen):将给定的字节数组写到这个缓冲输出流。◆voidwrite(intb):将给定的字节写到这个缓冲输出流。字节流缓冲区流BufferedInputStream和Bu【例8.9】文件拷贝的缓冲改进。字节流importjava.io.*;publicclassCopy{publicstaticvoidmain(Stringargs[]){BufferedInputStreambis=null;BufferedOutputStreambos=null;bytebuf[]=newbyte[100];try{bis=newBufferedInputStream(newFileInputStream("test.txt"));bos=newBufferedOutputStream(newFileOutputStream("testcopy.txt"));intlen=0;while(true){len=bis.read(buf);if(len<=0)break;bos.write(buf,0,len);}bos.flush();//缓冲区只有满时才会将数据输出到输出流,用flush()将未满的缓冲区中数据强制输出}catch(Exceptione){e.printStackTrace();}finally{if(bis!=null)try{bis.close();}catch(Exceptione){e.printStackTrace();}if(bos!=null)try{bos.close();}catch(Exceptione){e.printStackTrace();}}}}程序运行结果【例8.9】文件拷贝的缓冲改进。字节流importjav字符流

31Reader和Writer32InputStreamReader和OutputStreamWriter33FileReader和FileWriter34

35BufferedReader和BufferedWriterCharArrayReader和CharArrayWriter字符流31Reader和Writer32InputStrWriter和Reader以字符流方式向文件写入或从文件中读取数据,可以使用Writer和Reader类及其子类。

Writer和Reader类都是抽象类,不能建立它们的对象,所以只能通过它们子类对象对文件进行操作。常用的Writer类的子类包括FileWriter类和BufferedWriter类。FileWriter类构造方法如下:FileWriter(StringfileName):参数fileName表示带路径的磁盘文件名。FileWriter(Filefile):参数file表示为磁盘文件所建立的File对象名。

注:使用FileWriter进行文件操作时,为了减少磁盘读写次数,常常使用具有缓冲功能的BufferedWriter类。

Writer和Reader以字符流方式向文件写入或字符流InputStreamReader和OutputStreamWriter⑴InputStreamReader类的构造方法和方法:◆InputStreamReader(InputStreamin):构造一个InputStreamReader。◆InputStreamReader(InputStreamin,Stringenc):使用命名的字符编码构造一个InputStreamReader。◆voidclose():关闭流。◆StringgetEncoding():得到字符编码的名称。◆intread():读取一个字符。◆intread(char[]cbuf,intoff,intlen):将字符读到数组中。◆booleanready():如果这个流已准备好,返回True。⑵OutputStreamWriter类的构造方法和方法:◆OutputStreamWriter(OutputStreamout):构造一个OutputStreamWriter。◆OutputStreamWriter(OutputStreamout,Stringenc):使用命名的字符编码构造一个OutputStreamWriter。◆voidclose():关闭流。◆voidflush():刷新流。◆StringgetEncoding():得到这个流使用的字符编码的名称。◆voidwrite(char[]cbuf,intoff,intlen):写字符数组的一部分。◆voidwrite(intc):写一个字符。◆voidwrite(Stringstr,intoff,intlen):写一个字符串的一部分。字符流InputStreamReader和OutputStr【例8.10】利用InputStreamReader从键盘接受输入,再将输入的字符显示出来。字符流

importjava.io.*;classinputstreamreader{publicstaticvoidmain(Stringargs[]){try{intcharacter;InputStreamReaderinstreamread=newInputStreamReader(System.in);//InputStreamReader以字符形式读取输入while((character=instreamread.read())!=-1){System.out.print((char)character);}}catch(IOExceptione){}}System.out.print(“Bye”);}运行结果:输入:a,b,c,d输出:a,b,c,d输入:1,2,3,4输出:1,2,3,4输入:^Z输出:Bye【例8.10】利用InputStreamReader从键盘接字符流FileReader◆FileReader(Filefile):构造一个FileReader。◆FileReader(FileDescriptorfd):从一个文件描述符构造一个FileReader。◆FileReader(Stringfilename):从一个文件名构造一个FileReader。字符流FileReader◆FileReader(File【例8.11】下例中打开一个文件file.txt(内容为:Hellofromfile),将文件的内容读到缓冲区,然后显示数据。字符流

importjava.io.*;publicclassfileread{publicstaticvoidmain(Stringargs[])throwsException{ FileReaderfileread=newFileReader("file.txt");//打开文件 chardata[]=newchar[1024]; intcharsread=fileread.read(data);//读入 System.out.println(newString(data,0,charsread));//显示 fileread.close();//关闭文件流}}程序运行结果【例8.11】下例中打开一个文件file.txt(内容为:H字符流FileWriter◆FileWriter(Filefile):从File对象构造一个FileWriter。◆FileWriter(FileDescriptorfd):从文件描述符构造一个FileWriter。◆FileWriter(Stringfilename):从文件名构造一个FileWriter。◆FileWriter(Stringfilename,booleanappend):构造一个可附加的FileWriter。字符流FileWriter◆FileWriter(File字符流【例8.12】下例中,分别采用三种方式:逐字符地写数据、一次写入所有数据、分批写数据,使用类FileWriter。importjava.io.*;publicclassfilewrite{publicstaticvoidmain(Stringargs[])throwsException{chardata[]={'T','h','i','s','','i','s','','a','','s','t','r','i','n','g','','o','f','','t','e','x','t','.'};FileWriterfilewriter1=newFileWriter("file1.txt");for(intloop_index=0;loop_index<data.length;loop_index++){filewriter1.write(data[loop_index]);}FileWriterfilewriter2=newFileWriter("file2.txt");filewriter2.write(data);FileWriterfilewriter3=newFileWriter("file3.txt");filewriter3.write(data,5,10);filewriter1.close();filewriter2.close();filewriter3.close();}}运行结果:file1.txt和file2.txt的内容为:Thisisastringoftextfile3.txt的内容为:isastrin字符流【例8.12】下例中,分别采用三种方式:逐字符地写数据字符流BufferedReader和BufferedWriter这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。字符流BufferedReader和BufferedWrit字符流【例8.13】从键盘接受输入并回显。importjava.io.*;publicclassEchotest{publicstaticvoidmain(String[]args){BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));Strings;System.out.print("pleaseenterastring:");try{while((s=in.readLine()).length()!=0)System.out.println("输入是:"+s);}catch(IOExceptione){e.printStackTrace();}}}程序运行结果字符流【例8.13】从键盘接受输入并回显。importj字符流CharArrayReader和CharArrayWriter⑴CharArrayReader类的构造方法和方法如下:◆CharArrayReader(char[]buf):从给定的字符数组构造一个CharArrayReader。◆CharArrayReader(char[]buf,intoffset,intlength):同上。◆voidclose():关闭流。◆voidmark(intreadAheadLimit):在流中的当前位置加标记。◆booleanmarkSupported():如果这个流支持mark操作,那么返回True。◆intread():读取一个字符。◆intread(char[]b,intoff,intlen):将读入数组的一部分。◆booleanready():检查这个流是否已经准备好被读取。◆voidreset():将流重设到最近的标记。◆longskip(longn):跳过n个字符。(2)CharAraayWriter类的构造方法和方法同上类似。字符流CharArrayReader和CharArrayWr字符流【例8.14】下例演示CharArrayReader类的作用,该例从字符数组中逐个读取字符并显示。chararrayreader.javaimportjava.io.*;publicclasschararrayreader{publicstaticvoidmain(Stringargs[])throwsIOException{chardata[]={'T','h','i','s','','i','s','','a','','s','t','r','i','n','g','','o','f','','t','e','x','t','.'};CharArrayReaderchararrayreader=newCharArrayReader(data);intcharacter;while((character=chararrayreader.read())!=-1){System.out.print((char)character);}}}运行结果:Thisisastringoftext.字符流【例8.14】下例演示CharArrayReader类文件的随机访问

31在java中,类RandomAccessFile提供了随机访问文件的方法◆RandomAccessFile(Filefile,Stringmode):构造一个随机访问文件流,file为被访问的文件对象,mode是用来指定存取的模式,mode可以为r(读)、w(写)或rw(读写)。◆RandomAccessFile(Stringname,Stringmode):构造一个随机访问文件流,以便访问由字符串name指定名字的文件,mode参数使用同上32RandomAccessFile类提供用来读取某种基本数据类型的数据或字符串的方法◆booleanreadBoolean()◆bytereadByte()◆charreadChar()◆doublereadDouble()◆floatreadFloat()◆intreadInt()◆longreadLong()◆shortreadShort()◆StringreadLine()33RandomAccessFile类提供用来向文件中写入某种基本类型的数据或字符串的方法◆voidwriteByte(byteb)◆voidwriteBytes(Strings)◆voidwriteChar(charc)◆voidwriteChars(Strings)◆voidwriteDouble(doubled)◆voidwriteFloat(floatf)◆voidwriteInt(inti)◆voidwriteLong(longl)◆voidwriteShort(shorts)34和目前文件位置有关的方法◆voidseek(longpos):将文件指针移到pos(不可为负)的位置,相对于文件初始位置值(初始值为0)。◆longgetFilePointer():得到目前文件指针的位置(相对于文件初始位置)。◆longlength():得到文件的长度。◆intskipBytes(intn):使文件指针向前移动指定的n个字节文件的随机访问31在java中,类RandomAccess文件的随机访问【例8.15】把若干个32位整数写到一个名为test.txt的文件中,利用seek()方法,以相反的顺序读取这些数据。importjava.io.*;publicclassRandomFile{publicstaticvoidmain(Stringargs[]){RandomAccessFileraf=null;intdata[]={12,31,56,23,27,1,43,65,4,99};try{raf=newRandomAccessFile("test.txt","rw");for(inti=0;i<data.length;i++)raf.writeInt(data[i]);for(inti=data.length-1;i>=0;i--){raf.seek(i*4);System.out.println(raf.readInt());}catch(Exceptione){e.getMessage();}finally{if(raf!=null)try{raf.close();}catch(Exceptione){e.getMessage();}}}}程序运行结果文件的随机访问【例8.15】把若干个32位整数写到一个名为t使用DataOutputStream类向文件中写入各种类型数据的操作步骤:1、为磁盘文件建立File类对象;2、为该File对象建立FileOutputStream类流对象,建立其与磁盘文件的连接;3、为该FileOutputStream类对象建立DataOutputStream类对象,利用DataOutputStream类的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法分别向文件中写入整型、单精度型、双精度型、布尔型等数据;4、写入操作完成后,利用close()方法将流关闭,断开与磁盘文件的联系。

DataOutputStream流类使用DataOutputStream类向文件中写入各种importjava.io.*;publicclassFile{publicstaticvoidmain(String[]args)throwsIOException{intch;Filefile1=newFile("c:\\jdk1.3\\example\\dataFile.txt");Filefile2=newFile("c:\\jdk1.3\\example\\outFile.txt");try{FileInputStreamfin=newFileInputStream(file1);DataInputStreamdin=newDataInputStream(fin);inti=din.readInt();floatf=din.readFloat();booleanb=din.readBoolean();din.close();从磁盘文件读取各类数据【例8.16】importjava.io.*;从磁盘文件读取各类数据【FileOutputStreamfout=newFileOutputStream(file2);DataOutputStreamdout=newDataOutputStream(fout);dout.writeInt(i);dout.writeFloat(f);dout.writeBoolean(b);dout.close();System.out.println("整数:"+i);System.out.println("浮点数:"+f);System.out.println("布尔量:"+b);}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}从磁盘文件读取各类数据FileOutputStreamfout=newFilimportjava.io.*;publicclassFile{publicstaticvoidmain(String[]args){intch;InputStreamReaderiin=newInputStreamReader(System.in);BufferedReaderbin=newBufferedReader(iin);Filefile1=newFile("c:\\jdk1.3\\example\\dataFile.txt");try{FileOutputStreamfout=newFileOutputStream(file1);DataOutputStreamdout=newDataOutputStream(fout);System.out.println("输入整数");inti=Integer.parseInt(bin.readLine());System.out.println("输入浮点数");

向磁盘文件写入各类数据【例8.17】importjava.io.*;向磁盘文件写入各类数据【例floatf=Float.parseFloat(bin.readLine());System.out.println("输入布尔量");booleanb=newBoolean(bin.readLine()).booleanValue();dout.writeInt(i);dout.writeFloat(f);dout.writeBoolean(b);dout.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}

向磁盘文件写入各类数据floatf=Float.parseFlimportjava.io.*;publicclassFile{publicstaticvoidmain(String[]args)throwsIOException{intch;Filefile1=newFile("c:\\jdk1.3\\example\\newFile.txt");try{FileInputStreamfin=newFileInputStream(file1);System.out.println("文件中的信息为:");ch=fin.read();while(ch!=-1){System.out.print((char)ch);ch=fin.read();}fin.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}

以字节流方式读磁盘文件【例8.18】importjava.io.*;catch(FileNoimportjava.io.*;publicclassFile{publicstaticvoidmain(String[]args)throwsIOException{charch;Filefile1=newFile("c:\\jdk1.3\\example\\newFile.txt");try{FileOutputStreamfout=newFileOutputStream(file1);System.out.println("输入任一字符串,以?结束");ch=(char)System.in.read();while(ch!='?'){fout.write(ch);ch=(char)System.in.read();}fout.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}}}

以字节流方式写入文件【例8.19】importjava.io.*;catch(FileNimportjava.io.*;publicclassFile{publicstaticvoidmain(Stringargs[]){FileReaderfr;intch;try{fr=newFileReader("c:\\Ex11_5.java");while((ch=fr.read())!=-1){System.out.print((char)ch);}}catch(Exceptione){e.printStackTrace();}}}以字符流方式读文件【例8.20】用FileReader一个字符一个字符地读取整个文件。importjava.io.*;以字符流方式读文件【例8.【例8.21】应用类RandomAccessFile编写程序,实现将两个磁盘文件"input1.txt“和"input2.txt"中的内容合并,并显示在屏幕上。

importjava.io.*;publicclassFile{publicstaticvoidmain(Stringargs[]){Strings="";try{RandomAccessFilef1=newRandomAccessFile("c:/input1.txt","rw");RandomAccessFilef2=newRandomAccessFile("c:/input2.txt","rw");s=f1.readLine()+f2.readLine();charc[]=s.toCharArray();for(inti=0;i<s.length();i++)System.out.print(c[i]);System.out.println();}catch(Exceptione){}}}随机读写文件【例8.21】应用类RandomAccessFile编写程序实例1

设计一个如图所示界面,用户在文本区输入文本以后,当单击按钮"保存文件"后,则将文本区的内容写入到指定的文件中。实例1设计一个如图所示界面,用户importjava.awt.*;importjava.awt.event.*;importjava.io.*;publicclassExextendsWindowAdapterimplementsActionListener{ Framef; Buttonbtn; TextAreata; StringfileName; publicstaticvoidmain(Stringargv[]) { newEx("output.txt"); } publicEx(StringfileName) { this.fileName=fileName; f=newFrame(fileName); f.addWindowListener(this); btn=newButton("保存文件"); btn.addActionListener(this); ta=newTextArea(10,40);

实例1

importjava.awt.*;实例1f.add(ta,BorderLayout.CENTER); f.add(btn,BorderLayout.SOUTH); f.pack(); f.setVisible(true); }publicvoidactionPerformed(ActionEvente) { try{ FileOutputStreamfout=newFileOutputStream(fileName); bytebuf[]=ta.getText().getBytes(); fout.write(buf); fout.close(); } catch(IOExceptionioe) { System.err.println(e); } } publicvoidwindowClosing(WindowEvente) { System.exit(0); }}实例1

【例8.22】实现一个简单的文件编辑器。importjava.awt.*;importjava.awt.event.*;importjava.io.*;publicclassFileEditextendsWindowAdapterimplementsActionListener,TextListener{Framef;TextAreata1;Panelp1;TextFieldtf1;Buttonb1,b2,b3;FileDialogfd;Filefile1=null;publicstaticvoidmain(Stringargs[]){(newFileEdit()).display();}实例2

【例8.22】实现一个简单的文件编辑器。importjapublicvoiddisplay(){f=newFrame("FileEdit");f.setSize(680,400);f.setLocation(200,140);f.setBackground(Color.lightGray);f.addWindowListener(this);tf1=newTextField();tf1.setEnabled(false);tf1.setFont(newFont("Dialog",0,20));//设置文本行的初始字体f.add(tf1,"North");ta1=newTextArea();ta1.setFont(newFont("Dialog",0,20));//设置文本区的初始字体f.add(ta1);ta1.addTextListener(this);//注册文本区的事件监听程序p1=newPanel();p1.setLayout(newFlowLayout(FlowLayout.LEFT));

实例2

publicvoiddisplay(){实例2b1=newButton("Open");b2=newButton("Save");b3=newButton("SaveAs");p1.add(b1);p1.add(b2);p1.add(b3);b2.setEnabled(false);b3.setEnabled(false);b1.addActionListener(this);//注册按钮的事件监听程序b2.addActionListener(this);b3.addActionListener(this);f.add(p1,"South");f.setVisible(true);}publicvoidtextValueChanged(TextEvente){//实现TextListener接口中的方法,对文本区操作时触发b2.setEnabled(true);b3.setEnabled(true);}实例2

b1=newButton("Open");实例2publicvoidactionPerformed(ActionEvente){if(e.getSource()==b1){//单击[打开]按钮时fd=newFileDialog(f,"Open",FileDialog.LOAD);fd.setVisible(true);//创建并显示打开文件对话框if((fd.getDirectory()!=null)&&(fd.getFile()!=null)){tf1.setText(fd.getDirectory()+fd.getFile());try//以缓冲区方式读取文件内容{file1=newFile(fd.getDirectory(),fd.getFile());FileReaderfr=newFileReader(file1);BufferedReaderbr=newBufferedReader(fr);Stringaline;while((aline=br.readLine())!=null)//按行读取文本ta1.append(aline+"\r\n");fr.close();br.close();}catch(IOExceptionioe){System.out.println(ioe);}}}实例2

publicvoidactionPerformed(Acif((e.getSource()==b2)||(e.getSource()==b3)){//单击[保存]按钮时if((e.getSource()==b3)||(e.getSource()==b2)&&(file1==null)){//单击[SaveAs]按钮时,或单击[Save]按钮且文件对象为空时fd=newFileDialog(f,"Save",FileDialog.SAVE);if(file1==null)fd.setFile("Edit1.txt");elsefd.setFile(file1.getName());fd.setVisible(true);//创建并显示保存文件对话框if((fd.getDirectory()!=null)&&(fd.getFile()!=null)){tf1.setText(fd.getDirectory()+fd.getFile());file1=newFile(fd.getDirectory(),fd.getFile());save(file1);}}实例2

if((e.getSource()==b2)||(e.gelsesave(file1);}}publicvoidsave(Filefile1){try{//将文本区内容写入字符输出流FileWriterfw=newFileWriter(file1);fw.write(ta1.getText());fw.close();b2.setEnabled(false);b3.setEnabled(false);}catch(IOExceptionioe){System.out.println(ioe);}}publicvoidwindowClosing(WindowEvente){System.exit(0);}}实例2

else实例2【例8.2】对Test.txt及其上一级目录的File类对象进行操作。

目录和文件管理

——File类importjava.io.*;publicclassfileTest//创建一个文件{publicstaticvoidmain(Stringargs[]){Filef=newFile("parent\\fileTest.txt");Filef1=newFile("newfileTest.txt");try{System.out.println(f.getParent());System.out.println(f.getName());System.out.println(f1.getPath());System.out.println(f1.getAbsolutePath());}catch(Exceptione){e.printStackTrace();}}}程序运行结果【例8.2】对Test.txt及其上一级目录的File类对象【例8.3】建立

test.txt

文件对象,判断是否存在,如果不存在就创建之。importjava.io.*;publicclassCreateNewFile{publicstaticvoidmain(Stringargs[]){Filef=newFile("test.txt");try{if(!f.exists())f.createNewFile();elseSystem.out.println("exists");}catch(Exceptione){e.printStackTrace();}}}目录和文件管理

——File类【例8.3】建立

test.txt

文件对象,判断是否存在,【例8.4】创建文件夹Dir以及文件夹dir/cdir。目录和文件管理

——File类importjava.io.*;publicclassCreateDir{publicstaticvoidmain(Stringargs[]){Filef=newFile("test.txt");Filef1=newFile("Dir");Filef2=newFile("dir/cdir");Filef3=newFile("newTest.txt");try{f.renameTo(f3);//把test.txt改名为newTest.txtf1.mkdir();//创建目录Dirf2.mkdirs();//创建目录dir及其子目录cdir}catch(Exceptione){e.printStackTrace();}}}【例8.4】创建文件夹Dir以及文件夹dir/cdir。目录【例8.5】使用File类的方法获取文件file.txt的属性信息。目录和文件管理

——File类的应用importjava.io.*;publicclassfile{publicstaticvoidmain(String[]args){Filefl=newFile("file.txt");System.out.println("Thefileisexist?"+fl.exists());System.out.println("Thefilecanwrite?"+fl.canWrite());System.out.println("Thefilecanread?"+fl.canRead());System.out.println("Thefileisafile?"+fl.isFile());System.out.println("Thefileisadirectory?"+fl.isDirectory());System.out.println("Thefile'snameis:"+fl.getName());System.out.println("Thefile'sallpathis:"+fl.getAbsolutePath());System.out.println("Thefile'slengthis"+fl.length());} }程序运行结果【例8.5】使用File类的方法获取文件file.txt的属【例8.6】列出Dir目录下的所有文件和目录(Stringlist()),最后修改时间;若为目录则在其后面标出<DIR>,若为文件,则在其后面标出文件长度(提示:方法long

lastModified()能够返回自1970.1.1起

到最后修改时间之间的秒数)。importjava.io.*;importjava.util.*;publicclasstestDir{publicstaticvoidmain(Stringargs[]){Filef=newFile("Dir");String[]listAll=null;Filetemp=null;try{listAll=f.list();for(inti=0;i<listAll.length;i++){temp=newFile(listAll[i]);System.out.print(listAll[i]+"\t");if(temp.isDirectory())System.out.print("\t<DIR>\t");elseSystem.out.print(temp.length()+"\t");System.out.println(newDate(temp.lastModified()));}}catch(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论