第08章输入输出流和文件操作(信息学院2013级)_第1页
第08章输入输出流和文件操作(信息学院2013级)_第2页
第08章输入输出流和文件操作(信息学院2013级)_第3页
第08章输入输出流和文件操作(信息学院2013级)_第4页
第08章输入输出流和文件操作(信息学院2013级)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、第第8章章 输入输入/输出流和文件操作输出流和文件操作 8.1 文件和流的概念文件和流的概念 8.2 字节输入字节输入/输出流类输出流类 8.3 字符输入字符输入/输出流类输出流类 8.4 文件操作文件操作18.1 文件和流的概念文件和流的概念8.1.1 操作系统中的文件和目录概念操作系统中的文件和目录概念8.1.2 流的概念流的概念28.1.1 操作系统中的文件和目录概念操作系统中的文件和目录概念1/2文件与文件系统文件与文件系统文件文件是信息的一种组织形式,存储在外部介质上的具有标识是信息的一种组织形式,存储在外部介质上的具有标识名的一组相关信息集合。具有保存性,其内容可以长期保存名的一组

2、相关信息集合。具有保存性,其内容可以长期保存和多次使用。和多次使用。文件系统文件系统负责存取和管理文件,是操作系统不可或缺的重要负责存取和管理文件,是操作系统不可或缺的重要功能。文件扩展名标识文件类型,文件名和扩展名以功能。文件扩展名标识文件类型,文件名和扩展名以”.”分隔分隔.目录结构与文件检索目录结构与文件检索 目录是文件系统组织和管理的基本单位,目录中保存它所管目录是文件系统组织和管理的基本单位,目录中保存它所管理的每个文件的基本属性信息(称为文件目录项或文件控制理的每个文件的基本属性信息(称为文件目录项或文件控制块)。目录中可以包含文件和子目录。块)。目录中可以包含文件和子目录。38.

3、1.1 操作系统中的文件和目录概念操作系统中的文件和目录概念2/2文件的逻辑结构文件的逻辑结构流式文件流式文件:由字节序列或者字符序列组成,例如文本文:由字节序列或者字符序列组成,例如文本文件和源程序是字符流式文件件和源程序是字符流式文件记录式文件记录式文件:是一种有结构的文件,它包括若干记录。:是一种有结构的文件,它包括若干记录。记录是文件内独立的最小信息单位,操作系统每次操作记录是文件内独立的最小信息单位,操作系统每次操作至少存储、检索或更新一个记录。至少存储、检索或更新一个记录。文件的存取方法文件的存取方法顺序存取:按记录顺序进行读顺序存取:按记录顺序进行读/写操作的存取方法。写操作的存

4、取方法。随机存取:按记录位置序号进行读随机存取:按记录位置序号进行读/写操作的存取方法。写操作的存取方法。文件的使用接口文件的使用接口操作接口:为计算机用户提供的文件操作功能。操作接口:为计算机用户提供的文件操作功能。应用程序接口应用程序接口:由一组系统调用组成,包括建立文件、:由一组系统调用组成,包括建立文件、打开文件、读打开文件、读/写文件等等操作写文件等等操作48.1.2 流的概念流的概念1. 流的定义和作用流的定义和作用1)流的定义、方向性和读)流的定义、方向性和读/写操作写操作流的定义流的定义:流是指一组有顺序的、有起点和终点:流是指一组有顺序的、有起点和终点的字节集合,是对数据传输

5、的总称和抽象。数据在两的字节集合,是对数据传输的总称和抽象。数据在两个对象之间的传输都称为流。个对象之间的传输都称为流。 方向性方向性:分为输入和输出流。:分为输入和输出流。 读写操作读写操作:一个流只能进行读或者写的一种操作,:一个流只能进行读或者写的一种操作,不能同时进行读和写。分为输入流(读操作)和输出不能同时进行读和写。分为输入流(读操作)和输出流(写操作)。流(写操作)。58.1.2 流的概念流的概念1.流的定义和作用流的定义和作用2)流采用缓冲区技术流采用缓冲区技术 对流进行读对流进行读/写操作的最小单位是字节,这样效率写操作的最小单位是字节,这样效率很低。通过缓冲区技术提供效率。

6、很低。通过缓冲区技术提供效率。 缓冲区:缓冲区:通过缓冲区一次可以读写若干个字节,通过缓冲区一次可以读写若干个字节,使数据以足够大的数据块形式传送,提供数据传输效使数据以足够大的数据块形式传送,提供数据传输效率。率。3)流的作用)流的作用流的目的是独立于设备(驱动程序),使应用程序屏流的目的是独立于设备(驱动程序),使应用程序屏蔽外设的差异性,以同样的方法操作各种外设。蔽外设的差异性,以同样的方法操作各种外设。68.1.2 流的概念流的概念2. 流的存在流的存在 4种场景下的数据流动种场景下的数据流动 1)标准的输入)标准的输入/输出输出 2)文件读写操作)文件读写操作 3)线程通信)线程通信

7、 4)网络通信)网络通信7这是前面两种需要使这是前面两种需要使用流的场景用流的场景8.1.2 流的概念流的概念83. Java的流类和文件类的流类和文件类1)按照流中元素的基本单位,分为字节流和字符流。每类流又分为输入和输出两个方向。2)字节流以InputStream/OutputStream为根类;字符流一Reader和Writer为根类。1)流类)流类InputStream抽象字节输入流类抽象字节输入流类OuputStream抽象字节输出流类抽象字节输出流类Reader抽象字符输入流类抽象字符输入流类Writer抽象字符输出流类抽象字符输出流类2)文件操作类)文件操作类File文件类文件类

8、RandomAccessFile 随机存取文件类随机存取文件类9这是最基础的流类和文件类,这是最基础的流类和文件类,P216的的图图8.1给出了详细的类层次结构。给出了详细的类层次结构。Java流和文件的根类流和文件的根类10类类说明说明InputStream抽象抽象字节输入流类字节输入流类,是所有字节输入流类的根类,是所有字节输入流类的根类OutputStream抽象抽象字节输出流类字节输出流类,是所有字节输出流类的根类,是所有字节输出流类的根类Reader抽象抽象字符输入流类字符输入流类,是所有字符输入流类的根类,是所有字符输入流类的根类Writer抽象抽象字符输出流类字符输出流类,是所有

9、字符输出流类的根类,是所有字符输出流类的根类File文件类文件类RandomAccessFile随机存取文件类随机存取文件类8.2 字节字节输入输入/输出流类输出流类8.2.1 抽象字节流抽象字节流8.2.2 文件字节流文件字节流8.2.3 数据字节流数据字节流8.2.4 对象字节流对象字节流8.2.5 管道字节流管道字节流118.2.1 抽象字节流抽象字节流1.InputStream类及其子类类及其子类public abstract class InputStream extends Object implements Closeable public abstract int read()

10、 throws IOException; /返回读取的一个字节,抽象方法返回读取的一个字节,抽象方法 public int read(byte b) throws IOException /从输入流中读取若干字节到指定缓冲区,返回从输入流中读取若干字节到指定缓冲区,返回实际读取的字节数实际读取的字节数 public void close() throws IOException /关闭输入流,空方法关闭输入流,空方法12read方法()方法():读取到的字节数据存放在读取到的字节数据存放在b数组中,数组中,返回值为读取到的字节数,即返回值为读取到的字节数,即b数组中的元素个数。数组中的元素个数

11、。InputStream类的子类类的子类13对应单字节、基本类型数据、对象和管道字节流对应单字节、基本类型数据、对象和管道字节流2. OutputStream类及其子类类及其子类public abstract class OutputStream extends Object implements Closeable, Flushable public abstract void write(int b) throws IOException; /写入一个字节,抽象方法写入一个字节,抽象方法 public void write(byte b) throws IOException /将缓冲区中

12、的若干字节写入输出流将缓冲区中的若干字节写入输出流 public void flush() throws IOException /立即传输立即传输 public void close() throws IOException /关闭输出流,空方法关闭输出流,空方法14把值为把值为b的整形数,写入一个字节。而不是写入了一个的整形数,写入一个字节。而不是写入了一个整形数,占用整形数,占用4个字节。个字节。OutputStream类的子类类的子类15对应单字节、基本类型数据、对象和管道字节流对应单字节、基本类型数据、对象和管道字节流System.out是是PrintStream对象对象图图8.2

13、各种字节输入各种字节输入/输出流的读输出流的读/写方法写方法 16图图8.3 使用流类和文件类出现异常类的层次结构使用流类和文件类出现异常类的层次结构 由于输入输出需要与外设交互,读取或写入操作时需要处理的异常。 Eclipse会自动提示需要处理哪种异常,如读取文件会提示处理FileNotFoundException,读写对象会提示ClassNotFoundException等。Java标准输入标准输入/输出处理字节流输出处理字节流1.标准输入标准输入/输出常量输出常量public final class System extends Object public final static In

14、putStream in /标准输入常量标准输入常量 public final static PrintStream out /标准输出常量标准输出常量 public final static PrintStream err /标准错误输出常量标准错误输出常量182. PrintStream类类public class PrintStream extends FilterOutputStream public void print(boolean b) public void print(char c) public void print(long l) public void print(i

15、nt i) public void print(float f) public void print(double d) public void print(String s) public void print(Object obj) public void println()19标准输入标准输入/输出字节流例子输出字节流例子2013和和10分别是分别是 回车回车 和和换行换行标准输出空格当作字符读入空格当作字符读入8.2.2 文件字节流文件字节流1.FileInputSream类类public class FileInputStream extends InputStream public

16、 FileInputStream(String name); public FileInputStream(File file); public int read(); /从此输入流中读取一个数据字节。从此输入流中读取一个数据字节。 public int read(byte b); /从此输入流中将最多从此输入流中将最多 b.length 个字个字节的数据读入一个节的数据读入一个 byte 数组中。数组中。 public long skip(long n);/从输入流中跳过并丢弃从输入流中跳过并丢弃 n 个字节的数据。个字节的数据。21读文件2. FileOutputStream类类publi

17、c class FileOutputStream extends OutputStream public FileOutputStream(String name) ; public FileOutputStream(File file); public FileOutputStream(String name, boolean append); public void write(int b); /将指定字节写入此文件输出流。将指定字节写入此文件输出流。 public void write(byte b) ; /将将 b.length 个字节从指定个字节从指定 byte 数组写入此文件输出流

18、中。数组写入此文件输出流中。22写文件【例例8.1】 理解字节流。理解字节流。(1)从文件字节流中从文件字节流中读写读写1个字节个字节public class FileStream_byte1 public static void main(String args) throws IOExceptionString filename =filesStream.byte;FileOutputStream fout = new FileOutputStream(filename); /创建文件输出字节流对象fout.write(-1);/写入整数参数的最低字节fout.close();/关闭文件字

19、节输出流FileInputStream fin = new FileInputStream(filename); /创建文件输入字节流对象int i;while(i=fin.read()!= -1 ) /每次读取一个字节,字节流结束返回System.out.print( + i);fin.close();程序项程序项fileStream.byte写入了一个写入了一个-1,读取后打印。,读取后打印。看起来输出的应该是看起来输出的应该是-1,实际上却是,实际上却是255,为什么?,为什么?如果希望输出是如果希望输出是 1,如何修改程序如何修改程序System.out.print(“ ” + (by

20、te) i);(2) 从字节流中读写从字节流中读写4个字节作为个字节作为1个个int整数整数思路:对整形的4个字节经过移位后分4次写入。读取时也是分4次读入,通过移位组合成一个整数26public static void main(String args) throws IOExceptionString filename =filesS;FileOutputStream fout = new FileOutputStream(filename); /创建文件输出字节流对象int value = -128;fout.write(value24); /整数右移24位,即写入整数

21、的最高字节fout.write(value16);fout.write(value8);fout.write(value);fout.close();/关闭文件字节输出流FileInputStream fin = new FileInputStream(filename); /创建文件输入字节流对象while(value=fin.read()!= -1 ) /每次读取一个字节,字节流结束返回int tmp;for(int j=0;j3&(tmp=fin.read()!=-1;j+)value = value8 | tmp;System.out.print(value + );fin.c

22、lose();读写一个整数真的需要这么复杂吗【例例8.2】 使用使用字节流字节流读写文件。读写文件。(1)文件输入操作)文件输入操作(2)文件输出操作)文件输出操作(3)文件复制操作)文件复制操作 FileInputStream fin = new FileInputStream(this.filename);int count = fin.read(buffer); FileOutputStream fout = new FileOutputStream(filename2); fout.write(buffer);fin.close(); fout.close();27文件格式:文件格式:

23、按按ASCII码或者字节存储码或者字节存储一次读写多个字节一次读写多个字节按字节写成文件,文本编辑器不可读查看ByteFile.dat,其内容不可读,文件大小10字节使用文件字节输入使用文件字节输入/输出流输出流FileInputStream和和FileOutputStream类,可以实现记录式文件的读类,可以实现记录式文件的读/写操作。但是字节流的写操作。但是字节流的操作基本单位是字节操作基本单位是字节,如,如果对一个基本数据类型的数据进行读写操作,需要果对一个基本数据类型的数据进行读写操作,需要进行字节和基本数据类型的转换,实现过程麻烦;进行字节和基本数据类型的转换,实现过程麻烦;Java

24、已经将基本数据类型的读写操作封装成数据已经将基本数据类型的读写操作封装成数据字节流。数据字节输入流字节流。数据字节输入流DataInputStream和输和输出流出流DataOutputStream类提供类提供直接读写直接读写8种基本种基本数据类型数据类型数据的方法。数据的方法。288.2.3 数据字节流数据字节流public class DataInputStream extends FilterInputStream implements DataInput public DataInputStream(InputStream in) /构造方法构造方法 public final shor

25、t readShort() throws IOException public final byte readByte() throws IOException public final int readInt() throws IOException /读取整型读取整型 public final long readLong() throws IOException public final float readFloat() throws IOException public final double readDouble() throws IOException public final

26、char readChar() throws IOException /读取字符读取字符 public final boolean readBoolean() throws IOException 291. DateInputStream类类构造方法的参数类型是流类构造方法的参数类型是流类2. DataOutputStream类类public class DataOutputStream extends FilterOutputStream implements DataOutput public DataOutputStream(OutputStream out) /构造方法构造方法 pub

27、lic final void writeByte(int v) throws IOException public final void writeShort(int v) throws IOException public final void writeInt(int v) throws IOException /写入一个整型写入一个整型 public final void writeLong(long v) throws IOException public final void writeFloat(float v) throws IOException public final vo

28、id writeDouble(double v) throws IOException public final void writeChar(int v) throws IOException /写入一个字符写入一个字符 public final void writeBoolean(boolean v) throws IOException public final void writeChars(String s) throws IOException /写入一个字符串写入一个字符串 public final int size() /返回实际写入的字节数返回实际写入的字节数30构造方法的参

29、数类型是流类构造方法的参数类型是流类【例例8.3】 使用数据流读写整数文件。使用数据流读写整数文件。 1.数据写入文件的思路同标准输出数据写入文件的思路同标准输出2.捕获异常控制输入结束捕获异常控制输入结束 31读取文件过程需要与读取文件过程需要与外设交互,容易出现外设交互,容易出现异常,所以需要进行异常,所以需要进行异常处理异常处理 正确读取文件内容的前提是:事先知道文件存储的格式和正确读取文件内容的前提是:事先知道文件存储的格式和顺序,如顺序,如IntFile例子中都是整形数据;例子中都是整形数据; 如果读写的文件里面有多种数据类型,如何读写,如把如果读写的文件里面有多种数据类型,如何读写

30、,如把IntFile修改为整形和修改为整形和double依次存取方式。依次存取方式。文件读取的顺序一定要和写入顺序完文件读取的顺序一定要和写入顺序完全一致,否则读到的结果就不正确。全一致,否则读到的结果就不正确。8.2.4 对象字节流对象字节流1.ObjectInputStream类类public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants public ObjectInputStream(InputStream in) /构造方法构造方法 public fi

31、nal Object readObject(); /读取一个对象读取一个对象 public int readInt(); 322. ObjectOutputStream类类public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants public ObjectOutputStream(OutputStream out) /构造方法构造方法 public final void writeObject(Object obj) ;/写入一个对象写入一个对象【例例8

32、.4】 使用对象流读写记录式文件。使用对象流读写记录式文件。33 为了把对象写入文件,所有的对象为了把对象写入文件,所有的对象(包括包括MyDate/Person/Student)都需要实现都需要实现Serializable接口接口; 如何从对象文件读取出对象出来?如何从对象文件读取出对象出来? Student stud = (Student)objin.readObject(); 同样也需要保证按照对象读取顺序和写入顺序完全一致;同样也需要保证按照对象读取顺序和写入顺序完全一致;各种输入各种输入/输出流及其读输出流及其读/写方法写方法 34 System.in.read只能按字节读取,为了从

33、键盘读取各种基本只能按字节读取,为了从键盘读取各种基本数据类型,需要使用数据类型,需要使用Scanner8.2.6 管道字节流管道字节流PipedInputStream类类PipedOutputStream类类建立管道流的方法建立管道流的方法 PipedInputStream in = new PipedInputStream();try PipedOutputStream out= new PipedOutputStream(in);catch(IOException ioe) 35 标准的输入/输出 文件读写操作 线程通信 网络通信 这是第这是第1种创建管道并建立连接的方式;种创建管道并建

34、立连接的方式; 第第2种是先分别创建输入、输出管道流,再种是先分别创建输入、输出管道流,再使用使用connect方法将它们连接方法将它们连接【例例】 点对点的线程间管道通信。点对点的线程间管道通信。36 代码中有一个发送线程,一个接收线程代码中有一个发送线程,一个接收线程 发送线程和接收线程使用管道通信发送线程和接收线程使用管道通信 发送线程优先级高于接收线程发送线程优先级高于接收线程 发送线程向发送线程向PipedOutputStream依次写入数据依次写入数据 接收线程从接收线程从PipedInputStream依次读取数据依次读取数据【例例8.4】 使用管道流实现的发牌程序。使用管道流实

35、现的发牌程序。图图8.9 发牌程序中多个线程对象间的管道流发牌程序中多个线程对象间的管道流 37 在在7. 多线程部分,采用共享内容和多线程协作方式完成此任务。多线程部分,采用共享内容和多线程协作方式完成此任务。 本章的思路是:建立好本章的思路是:建立好4对管道输入输出流,对管道输入输出流,sender线程依次向线程依次向4个输出个输出管道写数据,管道写数据,4个个Receiver线程分别从自己的输入管道流读取数据。线程分别从自己的输入管道流读取数据。8.3 字符输入字符输入/输出流类输出流类8.3.1 抽象字符流抽象字符流8.3.2 字节字节/字符转换流字符转换流 8.3.3 文件字符流文件

36、字符流8.3.4 缓冲字符流缓冲字符流8.3.5 格式化字符输出流格式化字符输出流 8.3.6 Java标准输入标准输入/输出输出388.3.1 抽象字符流抽象字符流1.Reader类类public abstract class Reader extends Object implements Readable, Closeable public int read(); /读取单个字符。读取单个字符。 public int read(char cbuf); / 将字符读入数组。将字符读入数组。 abstract public int read(char cbuf, int off, int l

37、en) ; / 将字符读入数组的某一部分。将字符读入数组的某一部分。 abstract public void close();392. Writer类类public abstract class Writer implements Appendable, Closeable, Flushable public void write(int c); /写入单个字符。写入单个字符。 public void write(char cbuf); /写入字符数组。写入字符数组。 public void write(String str); /将字符串写入输出流将字符串写入输出流 public Writ

38、er append(char c); /将指定字符添加到此将指定字符添加到此 writer。 public abstract void flush(); /将缓冲区内容写入输出流将缓冲区内容写入输出流 public abstract void close();40图图8.10 各种字符输入各种字符输入/输出流的读输出流的读/写方法写方法 8.3.2 字节字节/字符转换流字符转换流 1.InputStreamReader字节输入流转换成字符输入流类字节输入流转换成字符输入流类public class InputStreamReader extends Reader public InputStr

39、eamReader(InputStream in) /in指定字节输入流作为数据源,采用默认字符集指定字节输入流作为数据源,采用默认字符集 public InputStreamReader(InputStream in, String charsetName) /指定字符集名称指定字符集名称 throws UnsupportedEncodingException /不支持不支持charsetName字符集,抛出异常字符集,抛出异常 public String getEncoding() /返回字符集名称字符串返回字符集名称字符串2.字节输出流转换成字符输出流字节输出流转换成字符输出流Outpu

40、tStreamWriterpublic class OutputStreamWriter extends Writer public OutputStreamWriter(OutputStream out) /指定字节输出流作为数据源,默认字符集指定字节输出流作为数据源,默认字符集 public OutputStreamWriter(OutputStream out, Charset charset) /charset指定字符集指定字符集 public String getEncoding() /返回字符集名返回字符集名 实现数据在字节和不同编码集中进行转换。实现数据在字节和不同编码集中进行转

41、换。8.3.3 文件字符流文件字符流1.FileReader类类public class FileReader extends InputStreamReader public FileReader(String fileName) /构造方法构造方法 public FileReader(File file);读文件的方法在读文件的方法在InputStreamReader中实现中实现442. FileWriter类类public class FileWriter extends OutputStreamWriter public FileWriter(String fileName) /构造方

42、法构造方法 public FileWriter(String fileName, boolean append) ; public FileWriter(File file) ; public FileWriter(File file, boolean append) ;写文件的方法在写文件的方法在OutputStreamWriter中实现中实现45 FileWrite写的文件是写的文件是ASCII可读的。可读的。8.3.4 缓冲字符流缓冲字符流1.BufferedReader类类public class BufferedReader extends Reader public Buffere

43、dReader(Reader in) /构造方法构造方法 public String readLine() throws IOException /读取一行字符串,输入流结束时返回读取一行字符串,输入流结束时返回null2.BufferedWriter类类public class BufferedWriter extends Writer public BufferedWriter(Writer out) /构造方法构造方法 public BufferedWriter(Writer out, int sz) /sz指定字符缓冲区长度指定字符缓冲区长度 public void newLine()

44、 throws IOException /写入一个换行符写入一个换行符46FileReader按字符操作,效率低【例8.6】 将Fibonacci序列值写入文本文件。8.3.5 格式化字符格式化字符输出流输出流 public class PrintWriter extends Writer public PrintWriter(OutputStream out, boolean autoFlush) /autoFlush指定是否立即传输,默认指定是否立即传输,默认false public void print(boolean bool) /输出输出boolean取值取值true或或false

45、public void print(char ch) public void print(int i) /将整数将整数i的取值转换成字符串输出的取值转换成字符串输出 public void print(long l) public void print(float f) public void print(double d) public void print(char s) public void print(String s) public void print(Object obj) /默认调用默认调用obj.toString()方法方法 public void println() /自

46、动追加回车换行符,其他重载方法参数同上自动追加回车换行符,其他重载方法参数同上 public PrintWriter format(String format, Object. args) . PrintWriter支持格式化的输出,从支持格式化的输出,从API帮助可以看出比帮助可以看出比BufferWriter功能更多。功能更多。8.4 文件操作文件操作8.4.1 文件操作类文件操作类8.4.2 文件过滤器接口文件过滤器接口8.4.3 文件对话框组件文件对话框组件8.4.4 随机存取文件类随机存取文件类488.4.1 文件操作类文件操作类1.File类的构造方法类的构造方法public cl

47、ass File extends Object implements Serializable, Comparable public File(String pathname) public File(String parent, String child) public File(File parent, String child)例如,例如,File file = new File(myfile.txt); File dir = new File(.,); /创建一个目录文件对象,表示当前目录创建一个目录文件对象,表示当前目录 File dir = new File(C:,); 492.

48、File类提供的方法类提供的方法1. 访问文件对象方法访问文件对象方法public String getName() /返回文件名,不包含路径名返回文件名,不包含路径名public String getPath() /返回相对路径名,包含文件名返回相对路径名,包含文件名public String getAbsolutePath() /返回绝对路径名,包含文件名返回绝对路径名,包含文件名public String getParent() /返回父文件对象的路径名返回父文件对象的路径名public File getParentFile() /返回父文件对象返回父文件对象2. 获得或设置文件属性获得

49、或设置文件属性 public long lastModified() /文件最后一次被修改的时间文件最后一次被修改的时间 public boolean setReadOnly() /设置文件只读设置文件只读3. 文件操作文件操作方法方法 public boolean createNewFile() /创建新文件创建新文件4. 目录操作方法目录操作方法 public boolean mkdir() /创建目录创建目录【例例】当前目录及子目录的文件列表当前目录及子目录的文件列表 。508.4.2 文件过滤器接口文件过滤器接口1.FileFilter和和FilenameFilter接口接口publi

50、c interface FileFilter public boolean accept(File pathname)public interface FilenameFilter public boolean accept(File dir, String name)2.获得文件列表时使用过滤器获得文件列表时使用过滤器public String list(FilenameFilter filter) /过滤显示文件清单过滤显示文件清单public File listFiles(FilenameFilter filter)public File listFiles(FileFilter fil

51、ter)【例例8.8】 带过滤器的文件名列表。带过滤器的文件名列表。51文件过滤器接口文件过滤器接口这些实例过滤这些实例过滤 File 类的类的 list 方法中的目录清单。方法中的目录清单。即即FilenameFilter的的accept方法会在调用方法会在调用File类类的的list方法时自动被调用。方法时自动被调用。 FilenameFilter过滤文件名,过滤文件名,FileFilter过过滤文件路径。滤文件路径。528.4.3 文件对话框组件文件对话框组件public class JFileChooser extends JComponent implements Accessibl

52、e public static final int APPROVE_OPTION = 0; /单击单击“打开打开”或或“保存保存”按钮按钮 public static final int CANCEL_OPTION = 1; /单击单击“撤消撤消”按钮按钮 public static final int ERROR_OPTION = -1; /出错出错 public JFileChooser() public JFileChooser(String currentDirectoryPath) /初始路径初始路径 public JFileChooser(File currentDirectory

53、) public void setFileFilter(FileFilter filter) /设置文件过滤器设置文件过滤器 public int showOpenDialog(Component parent) throws HeadlessException /显示打开文件对话框显示打开文件对话框 public int showSaveDialog(Component parent) throws HeadlessException /显示保存文件对话框显示保存文件对话框 public File getSelectedFile() /返回选中文件返回选中文件532. JFileChoose

54、r的文件过滤器的文件过滤器public abstract class FileFilter extends Object public abstract boolean accept(File f) /过滤操作,过滤操作,f指定待过滤文件指定待过滤文件 public abstract String getDescription() /文件类型描述字符串文件类型描述字符串【例例8.9】 文本文件编辑器。文本文件编辑器。548.4.4 随机存取文件类随机存取文件类public class RandomAccessFile extends Object implements DataOutput,

55、DataInput, Closeable public RandomAccessFile(String name, String mode) throws FileNotFoundException public RandomAccessFile(File file, String mode) throws FileNotFoundException public final int readInt() throws IOException /读一个整数类型值,当读到文件尾时,抛出读一个整数类型值,当读到文件尾时,抛出EOFException异常异常 public final void wri

56、teInt(int v) throws IOException /写入一个整型值写入一个整型值 public long length() throws IOException /返回文件长度返回文件长度 public long getFilePointer() throws IOException /获取文件指针位置获取文件指针位置 public void seek(long pos) throws IOException /设置文件指针位置设置文件指针位置 public void close() throws IOException /关闭文件关闭文件 【例例8.11】 在文件中添加不重复数据。在文件中添加不重复数据。55总结总结目的:目的:使用流和文件操作。使用流和文件操作。要求:要求:(1)掌握字节流和字符流的功能和使用方法;)掌握字节流和字符流的功能和使用方法;(2)掌握文件操作的基本方法。)掌握文件操作的基本方法。重点:重点:(1)熟悉流在文件操作中的作用;)熟悉流在文件操作中的作用;(2)掌握对文件操作的)掌握对文件操作的File类;类;(3)理解文件过滤器、文件对话框和随机存取)理解文件过滤器、文件对话框和随机存取文件

温馨提示

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

评论

0/150

提交评论