Java基础教程(第3版)_第9章_输入、输出流_第1页
Java基础教程(第3版)_第9章_输入、输出流_第2页
Java基础教程(第3版)_第9章_输入、输出流_第3页
Java基础教程(第3版)_第9章_输入、输出流_第4页
Java基础教程(第3版)_第9章_输入、输出流_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、第 1 页注意:开始用功了注意:开始用功了!第 2 页Java 基础教程(第基础教程(第3版)版) 第第9章章配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平输入、输出流输入、输出流 第 3 页主要内容主要内容第 4 页输入流、输出流示意图输入流、输出流示意图 当程序需要读取磁盘上的数据或将程序中得到数据存储到磁盘时,就可以使用输入/输出流,简称I/O流。I/O流提供一条通道程序,可以使用这条通道读取“源”中的数据,或把数据送到“目的地”。 第 5 页9 .1 文件文件 FileFile对象主要用来获取文件本身的一些信息,对象主要用来获取文件本身的一些信息,

2、不涉及对文件的读写操作。不涉及对文件的读写操作。 创建一个创建一个FileFile对象的构造方法有对象的构造方法有3 3个:个: File(String filename); File(String directoryPath,String filename); File(File f, String filename); 第 6 页9.1.1 文件的属性文件的属性 File类的下列方法获取文件本身的一些信息。类的下列方法获取文件本身的一些信息。 public String getName() 获取文件的名字。获取文件的名字。public boolean canRead() 判断文件是否是可读

3、的。判断文件是否是可读的。public boolean canWrite() 判断文件是否可被写入。判断文件是否可被写入。public boolean exits() 判断文件是否存在。判断文件是否存在。public long length() 获取文件的长度(单位是字节)。获取文件的长度(单位是字节)。public String getAbsolutePath() 获取获取文件的绝对路径。文件的绝对路径。public String getParent() 获取文件的父目录。获取文件的父目录。public boolean isFile() 判断文件是否是一个普通文件,而不是目录。判断文件是否是

4、一个普通文件,而不是目录。public boolean isDirectroy() 判断文件是否是一个目录。判断文件是否是一个目录。public boolean isHidden() 判断文件是否是隐藏文件。判断文件是否是隐藏文件。public long lastModified() 获取文件最后修改的时间。获取文件最后修改的时间。第 7 页9.1.2 目录目录 1 1创建目录创建目录 public boolean mkdir()2 2列出目录中的文件列出目录中的文件 public String list() 用字符串形式返回目录下的全部文件。 public File listFiles()

5、用File对象形式返回目录下的全部文件。 public String list(FilenameFilter obj) 用字符串形式返回目录下的指定类型的所有文件。 public File listFiles(FilenameFilter obj) 用File对象形式返回目录下的指定类型所有文件。 上述两方法的参数上述两方法的参数FilenameFilterFilenameFilter是一个接口是一个接口,该接口有一个方法:,该接口有一个方法: public boolean accept(File dir,String name); 第 8 页9.1.3 文件的创建与删除文件的创建与删除 当使

6、用当使用FileFile类创建一个文件对象后,例如类创建一个文件对象后,例如 File file=new File(c:myletter,letter.txt); 如果如果c:myletter目录中没有名字为目录中没有名字为letter.txt文件文件, 文件对象文件对象filefile调用方法调用方法 public boolean createNewFile(); 可以在可以在c:myletter目录中建立一个名字为目录中建立一个名字为letter.txt的文件的文件。 文件对象调用方法文件对象调用方法 public boolean delete() 可以删除当前文件,例如:可以删除当前文件

7、,例如: file.delete(); 例子例子1 1列出了列出了D:ch9D:ch9目录下目录下javajava源文件的名字及其大小,并源文件的名字及其大小,并删除了删除了D:ch9D:ch9中的一个中的一个javajava源文件。源文件。 第 9 页9.1.4 运行可执行文件运行可执行文件 用用Runtime Runtime 类类声明一个对象声明一个对象( RuntimeRuntime类在类在java.langjava.lang包包) Runtime ec; 然后使用该类的然后使用该类的getRuntime()getRuntime()静态方法创建这个对象:静态方法创建这个对象: ec=Ru

8、ntime.getRuntime(); ecec可以调用可以调用 exec(String command) 方法方法打开本地机的可执行文件或执行一个操作。打开本地机的可执行文件或执行一个操作。 例子例子2 2中,中,RuntimeRuntime对象打开对象打开WindowsWindows平台上的绘图程序和记平台上的绘图程序和记事本程序。事本程序。 第 10 页 9.2文件字节流文件字节流 9.2.1 FileInputStream类类 FileInputStreamFileInputStream类是类是InputStreamInputStream的子类,称为文件字节输入流。的子类,称为文件字节

9、输入流。文件字节输入流按字节读取文件中的数据。该类的所有方法都是从文件字节输入流按字节读取文件中的数据。该类的所有方法都是从InputStreamInputStream类继承来的。类继承来的。 为了创建为了创建FileInputStreamFileInputStream类的对象,可以使用下列构造方法类的对象,可以使用下列构造方法:FileInputStream(String name)和和FileInputStream(File file)。 构造方法参数指定的文件称为输入流的源,输入流通过使用构造方法参数指定的文件称为输入流的源,输入流通过使用read()read()方法从输入流读出源中的数

10、据。方法从输入流读出源中的数据。 例如,为了读 取 一 个 名 为myfile.dat的文件,建立一个文件输入流对象,代码如下: try FileInputStream ins = new FileInputStream(myfile.dat); catch (IOException e ) System.out.println(e );try File f = new File(myfile.dat); FileInputStream istream = new FileInputStream(f);catch(IOException e ) System.out.println(e );第

11、 11 页read()方法从输入流中读取数据的基本方法从输入流中读取数据的基本方法 输入流的惟一目的是提供通往数据的通道,程序可以通过这个通道读取数据,read()方法给程序提供一个从输入流中读取数据的基本方法。只要不关闭流,每次调用read方法就顺序地读取文件中的其余内容,直到文件的末尾或文件字节输入流被关闭。int read() 读取单个字节的数据,返回字节值(0255整数),如果未读出字节就返回-1。 int read(byte b) 读取b.length个字节到字节数组b中,返回实际读取的字节数。如果到达文件的末尾,则返回-1。 int read(byte b, int off, in

12、t len) 读取len个字节到字节数组b中,并返回实际读取的字节数目。如果到达文件的末尾,则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。第 12 页9.2.2 FileOutputStreamFileOutputStream类类 与与FileInputStreamFileInputStream类相对应的类是类相对应的类是FileOutputStreamFileOutputStream类。类。FileOutputStreamFileOutputStream提供了基本的文件写入能力,是提供了基本的文件写入能力,是OutputStreamOutputStream的子类,称为文件

13、字节输出流。文件字节输出流按字节将数据写的子类,称为文件字节输出流。文件字节输出流按字节将数据写入到文件中。入到文件中。 为了创建为了创建FileOutputStreamFileOutputStream类的对象类的对象, ,可以使用下列构造方法:可以使用下列构造方法: FileOutputStream(String name); FileOutputStream(File file);构造方法参数指定的文件称为输出流的目的地。构造方法参数指定的文件称为输出流的目的地。 如果输出流指向的文件不存在,如果输出流指向的文件不存在,JavaJava就会创建该文件,如果执向的文件是已就会创建该文件,如果

14、执向的文件是已存在的文件,输出流将刷新该文件(使得文件的长度为存在的文件,输出流将刷新该文件(使得文件的长度为0 0)。)。 可以使用可以使用FileOutputStreamFileOutputStream类的下列能选择是否具有刷新功能的构造方法创类的下列能选择是否具有刷新功能的构造方法创建指向文件的输出流:建指向文件的输出流: FileOutputStream(String name, boolean append); FileOutputStream(File file, boolean append); 第 13 页write()write()方法把数据写入输出流到达目的地方法把数据写入

15、输出流到达目的地 输出流使用write()方法把数据写入输出流到达目的地。write的用法如下: 。 public void write(byte b) 写b.length个字节到输出流 public void.write(byte b,int off,int len) 从给定字节数组中起始于偏移量off处写len个字节到输出流,参数b是存放了数据的字节数组 。 只要不关闭流,每次调用writer()方法就顺序地向文件写入内容,直到流被关闭 。 在例例3中,首先将“欢迎welcom”写入到文件“hello.txt”中,然后再读取该文件中的内容。第 14 页 9.3 文件字符流文件字符流 9.3

16、.1 FileReader类类 FileReaderFileReader类是类是ReaderReader的子类,称为文件字符输入流。文件字符的子类,称为文件字符输入流。文件字符输入流按字符读取文件中的数据。输入流按字符读取文件中的数据。 为了创建为了创建FileReaderFileReader类的对象,可以使用下列构造方法:类的对象,可以使用下列构造方法: FileReader(String name)和和FileReader (File file) 。 构造方法参数指定的文件称为输入流的源,输入流通过使用构造方法参数指定的文件称为输入流的源,输入流通过使用read()read()方法从输入流

17、读出源中的数据。方法从输入流读出源中的数据。 第 15 页read()read()方法以字符为单位顺序地读取源中的数据方法以字符为单位顺序地读取源中的数据 ReaderReader类提供的类提供的readread方法以字符为单位顺序地读取源中的数据。方法以字符为单位顺序地读取源中的数据。 int read():输入流调用该方法从源中读取一个字符,该方法返回一个整数 . int read(char b):输入流调用该方法从源中读取b.length个字符到字符数组b中,返回实际读取的字符数目。 int read(char b, int off, int len):输入流调用该方法从源中读取len个

18、字符并存放到字符数组b中,返回实际读取的字符数目。 第 16 页9.3.2 FileWriterFileWriter类类 FileWriterFileWriter提供了基本的文件写入能力。提供了基本的文件写入能力。FileWriterFileWriter类是类是WriterWriter的子类,称为文件字符输出流。文件字符输出流按字符将的子类,称为文件字符输出流。文件字符输出流按字符将数据写入到文件中。为了创建数据写入到文件中。为了创建FileWriterFileWriter类的对象,可以使用下类的对象,可以使用下列构造方法:列构造方法: FileWriter(String name); Fil

19、eWriter (File file); :构造方法参数指定的文件称为输出流的目的地构造方法参数指定的文件称为输出流的目的地 。 如果输出流指向的文件不存在,如果输出流指向的文件不存在,JavaJava就会创建该文件,如果执向的文件是就会创建该文件,如果执向的文件是已存在的文件,输出流将刷新该文件(使得文件的长度为已存在的文件,输出流将刷新该文件(使得文件的长度为0 0)。)。 可以使用可以使用FileWriterFileWriter类的下列能选择是否具有刷新功能的构造方法创建指类的下列能选择是否具有刷新功能的构造方法创建指向文件的输出流:向文件的输出流: FileWriter (String

20、 name, boolean append); FileWriter (File file, boolean append); 第 17 页write()write()方法把数据写入输出流到达目的地方法把数据写入输出流到达目的地 输出流使用write()方法把数据写入输出流到达目的地。write的用法如下: 。 public void write(char b) 写b.length个字符到输出流。 public void.write(char b,int off,int len) 从给定字符数组中起始于偏移量off处写len个字符到输出流,参数b是存放了数据的字符数组。 void write(

21、String str) 把字符串中的全部字符写入到输出流。 void write(String str,int off,int len) 从字符串str中起始于偏移量off处写len个字符到输出流。 只要不关闭流,每次调用writer()方法就顺序地向文件写入内容,直到流被关闭. 例例4首先用字符输出流向一个已经存在的文件尾加若干个字符,然后再用字符输入流读出文件中的内容 。第 18 页 9.4 缓冲流缓冲流 9.4.1 BufferedReader类类 BufferedReaderBufferedReader类创建的对象称为缓冲输入流,该输入流的指向类创建的对象称为缓冲输入流,该输入流的指向

22、必须是一个必须是一个ReaderReader流,称为流,称为BufferedReaderBufferedReader流的底层流,底层流负责将流的底层流,底层流负责将数据读入缓冲区。数据读入缓冲区。BufferedReaderBufferedReader流的源就是这个缓冲区,缓冲输入流流的源就是这个缓冲区,缓冲输入流再从缓冲区中读取数据。再从缓冲区中读取数据。 将将BufferedReaderBufferedReader与与FileReaderFileReader连接,然后连接,然后BufferedReaderBufferedReader就可以按行读就可以按行读取取FileReaderFileR

23、eader指向的文件。指向的文件。 BufferedReader BufferedReader的构造方法如下的构造方法如下 BufferedReader(Reader in) BufferedReader BufferedReader流能够读取文本行,方法是流能够读取文本行,方法是readLine()。 可以向可以向BufferedReaderBufferedReader传递一个传递一个ReaderReader对象(如对象(如FileReaderFileReader的实例)来创的实例)来创建一个建一个BufferedReaderBufferedReader对象:对象: FileReader i

24、nOne=new FileReader(Student.txt) BufferedReader inTwo=new BufferedReader(inOne);然后inTwo调用readLine()顺序读取文件“Student.txt”的一行。 第 19 页9.4.2 BufferedWriterBufferedWriter类类 可以将可以将BufferedWriterBufferedWriter流和流和FileWriterFileWriter流连接在一起,然后流连接在一起,然后使用使用BufferedWriterBufferedWriter流将数据写到目的地。例如,流将数据写到目的地。例如,

25、 FileWriter tofile=new FileWriter(hello.txt); BufferedWriter out=new BufferedWriter(tofile); ; BufferedReaderBufferedReader流调用方法:流调用方法: write(String str) write(String s,int off,int len)把字符串s或s的一部分写入到目的地。 BufferedWriter BufferedWriter调用调用newLine() 向文件写入一个回行. BufferedWriterBufferedWriter调用调用flush() 刷新

26、缓冲区。 例例5 5将文件将文件“Student.txt”Student.txt”中的内容按行读出,并写入到另中的内容按行读出,并写入到另一个文件中,且给每一行加上行号。一个文件中,且给每一行加上行号。第 20 页9.4.3 标准化考试标准化考试 test.txttest.txt是一套标准化考试的试题文件是一套标准化考试的试题文件 . . 例例6 6使用输入流读取试题文件,每次显示试题文件中的一道题目。当读取到字符*时,暂停读取,等待用户从键盘输入答案。用户做完全部题目后,程序给出用户的得分。 程序运行效果如图9.3。 第 21 页 9.5 数据流数据流 DataInputStream Dat

27、aInputStream和和DataOutputStreamDataOutputStream类类创建的对象称为数创建的对象称为数据输入流和数据输出流。据输入流和数据输出流。 构造方法构造方法: : DataInputStream(InputStream in)创建的数据输入流指向一个由参数in指定的底层输入流 DataOutputStream(OutnputStream out)创建的数据输出流指向一个由参数out指定的底层输出流 例子例子7 7写几个写几个JavaJava类型的数据到一个文件,并再读出来类型的数据到一个文件,并再读出来 . .第 22 页9.6 对象流对象流 ObjectIn

28、putStreamObjectInputStream和和ObjectOutputStreamObjectOutputStream类类创建的对象称创建的对象称为对象输入流和对象输出流。为对象输入流和对象输出流。 对象输出流调用对象输出流调用writeObject(Object obj) 将一个对象obj写入输出流送往目的地 对象输入流调用对象输入流调用readObject() 从源中读取一个对象到程序中 ObjectInputStreamObjectInputStream和和ObjectOutputStreamObjectOutputStream类类的构造方法是:的构造方法是: ObjectIn

29、putStream(InputStream in) ObjectOutputStream(OutputStream out) 例子例子8 8 TV.javaTV.java,Example9_8.javaExample9_8.java使用对象流读写使用对象流读写TVTV类创建的类创建的对象。对象。程序运行效果如图程序运行效果如图9.49.4。 FileOutputStream file_out=new FileOutputStream(tom.txt);ObjectOutputStream object_out=new ObjectOutputStream(file_out);FileInput

30、Stream file_in=new FileInputStream(tom.txt);ObjectInputStream object_in=new ObjectInputStream(file_in); 所谓序列化:一个类如果实现了所谓序列化:一个类如果实现了SerializableSerializable接口,那么这个类创建接口,那么这个类创建的对象就是所谓序列化的对象。的对象就是所谓序列化的对象。 第 23 页例子例子8 8TV.javaTV.java,Example9_8.javaExample9_8.java使用使用对象流读写对象流读写TVTV类创建的对象。类创建的对象。程序运行效

31、果如图程序运行效果如图9.49.4。 ObjectOutputStreamObjectOutputStream的指向应当是一个输出流对象,因此当准备将一个对的指向应当是一个输出流对象,因此当准备将一个对象写入到文件时,首先用象写入到文件时,首先用FileOutputStreamFileOutputStream创建一个文件输出流创建一个文件输出流FileOutputStream file_out=new FileOutputStream(tom.txt);ObjectOutputStream object_out=new ObjectOutputStream(file_out);ObjectIn

32、putStreamObjectInputStream的指向应当是一个输入流对象,因此当准备从文件中的指向应当是一个输入流对象,因此当准备从文件中读入一个对象到程序中时,首先用读入一个对象到程序中时,首先用FileInputStreamFileInputStream创建一个文件输入流创建一个文件输入流FileInputStream file_in=new FileInputStream(tom.txt);ObjectInputStream object_in=new ObjectInputStream(file_in);ObjectInputStream(InputStream in)Objec

33、tOutputStream(OutputStream out)第 24 页9.7 随机读写流随机读写流 RandomAccessFileRandomAccessFile类既不是输入流类类既不是输入流类InputStreamInputStream的子类,也的子类,也不是输出流类不是输出流类OutputStramOutputStram的子类。的子类。 使用使用RandomAccessFileRandomAccessFile类来创建一个随机访问文件流。类来创建一个随机访问文件流。RandomAccessFileRandomAccessFile类创建的流的指向既可以作为源也可以作为目类创建的流的指向既

34、可以作为源也可以作为目的地。的地。 构造方法构造方法: RandomAccessFile(String name,String mode) ; RandomAccessFile(File file,String mode) ; 相关方法:相关方法: seek(long a) 定位RandomAccessFile流的读写位置 getFilePointer() 获取流的当前读写位置 例子例子9 9把把5 5个个intint类型整数写入到一个名字为类型整数写入到一个名字为tom.dattom.dat文件中,然文件中,然后按相反顺序读出这些数据。后按相反顺序读出这些数据。 第 25 页9.8 使用使用

35、ScannerScanner解析文件解析文件 使用使用ScannerScanner类和正则表达式来解析文件的特点是以时间类和正则表达式来解析文件的特点是以时间换取空间,即解析的速度相对较慢,但节省内存。换取空间,即解析的速度相对较慢,但节省内存。 第 26 页9.8.1 使用默认分隔标记解析文件使用默认分隔标记解析文件 创建创建ScannerScanner对象,并指向要解析的文件对象,并指向要解析的文件,例如:例如: File file = new File(hello.java); Scanner sc = new Scanner(file); sc将空白作为分隔标记 相关方法相关方法 next()依次返回file中的单词 hasNext()判断file最后一个单词是否已被next()方法返回. nextInt()或nextDouble()方法将数字型单词转化为int或double数据返回 例子例子1010中使用Scanner对象解析文件cost.txtcost.txt中的全部消费并计算出总消费。程序运行效果如图9.5。 第 27 页9.8.2 使用正则表达式作为分隔标记解析文件使用正则表达式作为分隔标记解析文件 创 建创 建 S c a n n e r 对 象 , 指 向 要 解 析 的 文 件 , 并 使 用对 象 , 指 向 要 解 析 的 文 件 , 并

温馨提示

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

评论

0/150

提交评论