(本科)第12章输入和输出ppt课件.ppt

上传人:春哥&#****71; 文档编号:15303562 上传时间:2022-05-12 格式:PPT 页数:33 大小:178KB
返回 下载 相关 举报
(本科)第12章输入和输出ppt课件.ppt_第1页
第1页 / 共33页
(本科)第12章输入和输出ppt课件.ppt_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《(本科)第12章输入和输出ppt课件.ppt》由会员分享,可在线阅读,更多相关《(本科)第12章输入和输出ppt课件.ppt(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、课程主讲人:第12章输入和输出第第12章章 输入和输出输入和输出2导读导读主要内容主要内容字节流与字符流字节流与字符流缓冲流缓冲流随机流随机流数组流数组流数据流数据流对象流对象流序列化与对象可隆序列化与对象可隆文件锁文件锁使用使用Scanner解析文件解析文件3输入、输出流提供一条通道程序,可以使用这条通道输入、输出流提供一条通道程序,可以使用这条通道读取源中的数据或把数据传送到目的地。把输入流的指读取源中的数据或把数据传送到目的地。把输入流的指向称作源,程序从指向源的输入流中读取源中的数据;向称作源,程序从指向源的输入流中读取源中的数据;而输出流的指向是数据要去的一个目的地,程序通过向而输出

2、流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把数据传送到目的地。输出流中写入数据把数据传送到目的地。 概述概述412.1 FileFile类类 FileFile对象主要用来获取文件本身的一些信息,对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。不涉及对文件的读写操作。 创建一个创建一个FileFile对象的构造方法有对象的构造方法有3 3个:个: File(String filename); File(String filename); File(String directoryPath,String filename); File(String directoryP

3、ath,String filename); File(File f, String filename); File(File f, String filename); 512.1.1 文件的属性文件的属性 File类的下列方法获取文件本身的一些信息。类的下列方法获取文件本身的一些信息。 public String getName() 获取文件的名字。获取文件的名字。public boolean canRead() 判断文件是否是可读的。判断文件是否是可读的。public boolean canWrite() 判断文件是否可被写入。判断文件是否可被写入。public boolean exits(

4、) 判断文件是否存在。判断文件是否存在。public long length() 获取文件的长度(单位是字节)。获取文件的长度(单位是字节)。public String getAbsolutePath() 获取获取文件的绝对路径。文件的绝对路径。public String getParent() 获取文件的父目录。获取文件的父目录。public boolean isFile() 判断文件是否是一个普通文件,而不是目录。判断文件是否是一个普通文件,而不是目录。public boolean isDirectroy() 判断文件是否是一个目录。判断文件是否是一个目录。public boolean i

5、sHidden() 判断文件是否是隐藏文件。判断文件是否是隐藏文件。public long lastModified() 获取文件最后修改的时间。获取文件最后修改的时间。 例子例子1 1 612.1.2 目录目录 1 1创建目录创建目录 public boolean mkdir()2 2列出目录中的文件列出目录中的文件 public String list() 用字符串形式返回目录下的全部文件。用字符串形式返回目录下的全部文件。 public File listFiles() 用用FileFile对象形式返回目录下的全部对象形式返回目录下的全部文件。文件。 public String list

6、(FilenameFilter obj) 用字符串形式用字符串形式返回目录下的指定类型的所有文件。返回目录下的指定类型的所有文件。 public File listFiles(FilenameFilter obj) 用用FileFile对对象形式返回目录下的指定类型所有文件。象形式返回目录下的指定类型所有文件。 上述两方法的参数上述两方法的参数FilenameFilterFilenameFilter是一个接口是一个接口,该接口有一个方法:,该接口有一个方法:public boolean accept(File dir,String name); 7例子2例子2中,列出当前目录(应用程序所在的目

7、录)下全部java文件的名字。Example10_2.java使用FileAccept.java来确定列出怎样类型的文件812.1.3 文件的创建与删除文件的创建与删除 当使用当使用FileFile类创建一个文件对象后,例如类创建一个文件对象后,例如 File file=new File(c:myletter,letter.txt); File file=new File(c:myletter,letter.txt); 如果如果c:myletterc:myletter目录中没有名字为目录中没有名字为letter.txtletter.txt文件,文件,文文 件件对象对象filefile调用方法调

8、用方法 public boolean createNewFile();public boolean createNewFile(); 可以在可以在c:myletterc:myletter目录中建立一个名字为目录中建立一个名字为letter.txtletter.txt的文的文件。件。 文件对象调用方法文件对象调用方法 public boolean delete()public boolean delete() 可以删除当前文件,例如:可以删除当前文件,例如: file.delete(); file.delete(); 912.1.4 运行可执行文件运行可执行文件 用用Runtime Runtim

9、e 类类声明一个对象声明一个对象( RuntimeRuntime类在类在java.langjava.lang包包) Runtime ec; Runtime ec; 然后使用该类的然后使用该类的getRuntime()getRuntime()静态方法创建这个对象:静态方法创建这个对象: ec=Runtime.getRuntime();ec=Runtime.getRuntime(); ecec可以调用可以调用exec(String command)exec(String command)方法方法打开本地机的可打开本地机的可执行文件或执行一个操作。执行文件或执行一个操作。 例题例题3 3,Runti

10、me对象打开windows平台上的记事本程序和浏览器。1012.2 字节流与字符流字节流与字符流 java.iojava.io包提供了大量的流类,包提供了大量的流类,JavaJava把把InputStreamInputStream抽象类的子类创建的流对象称作字抽象类的子类创建的流对象称作字节输入流、节输入流、OutputStreamOutputStream抽象类的子类创建的抽象类的子类创建的流对象称作字节输出流,流对象称作字节输出流,JavaJava把把ReaderReader抽象类抽象类的子类创建的流对象称作字符输入流、的子类创建的流对象称作字符输入流、WriterWriter抽象类的子类创

11、建的流对象称作字符输出流。抽象类的子类创建的流对象称作字符输出流。 针对不同的源或目的地,针对不同的源或目的地,java.iojava.io包为程序包为程序提供了相应的输入流或输出流,这些输入、输提供了相应的输入流或输出流,这些输入、输出流绝大部分都是出流绝大部分都是InputStreamInputStream、OutputStreamOutputStream、ReaderReader或或WriterWriter的子类。的子类。 1112.2.1 InputStreamInputStream类与类与OutputSreamOutputSream类类 InputStream类提供的类提供的read

12、方法以字节为单位顺序地读取源方法以字节为单位顺序地读取源中的数据,只要不关闭流,每次调用中的数据,只要不关闭流,每次调用read方法就顺序地读取源中方法就顺序地读取源中的其余内容,直到源的末尾或输入流被关闭。的其余内容,直到源的末尾或输入流被关闭。InputStream类有如下常用的方法。类有如下常用的方法。 int read() int read(byte b) int read(byte b,int off,int len) void close() long skip(long numBytes) OutputStreamOutputStream流以字节为单位顺序地写文件,只要流以字节为

13、单位顺序地写文件,只要不关闭流,每次调用不关闭流,每次调用writewrite方法就顺序地向目的地写入方法就顺序地向目的地写入内容,直到流被关闭。内容,直到流被关闭。 OutputStream OutputStream类有如下的常用的方法。类有如下的常用的方法。 void write(int n) void write(byte b) void write(byte b,int off,int len) void close()12 12.2.2 Reader类与类与Writer类类 1 1ReaderReader类提供的类提供的readread方法以字符为单位顺序地读取源中的数据。方法以字符

14、为单位顺序地读取源中的数据。int read():int read(char b):int read(char b, int off, int len):void close():long skip(long numBytes): 2 2 WriterWriter流以字符为单位顺序地写文件,每次调用流以字符为单位顺序地写文件,每次调用writewrite方法就顺序地方法就顺序地向目的地写入内容。向目的地写入内容。 Writer类有如下常用的方法。类有如下常用的方法。 void write(int n): 向输出流写入一个字符。向输出流写入一个字符。 void write(byte b): 向输

15、出流写入一个字符数组。向输出流写入一个字符数组。 void write(byte b,int off,int length): 从给定字符数组中起从给定字符数组中起始于偏移量始于偏移量off处取处取len个字符写到输出流。个字符写到输出流。 void close(): 关闭输出流。关闭输出流。13 12.2.3 关闭流关闭流 流都提供了关闭方法流都提供了关闭方法close(),尽管程序结束时会自动尽管程序结束时会自动关闭所有打开的流,但是当程序使用完流后,显式地关关闭所有打开的流,但是当程序使用完流后,显式地关闭任何打开的流仍是一个良好的习惯。闭任何打开的流仍是一个良好的习惯。 通过调用通过调

16、用close()close()方法,可以保证操作系统把流缓冲方法,可以保证操作系统把流缓冲区的内容写到它的目的地,即关闭输出流可以把该流所区的内容写到它的目的地,即关闭输出流可以把该流所用的缓冲区的内容冲洗掉用的缓冲区的内容冲洗掉( (通常冲洗到磁盘文件上通常冲洗到磁盘文件上) )。 1412.3 文件字节流文件字节流 由于应用程序经常需要和文件打交道,所以由于应用程序经常需要和文件打交道,所以InputStream专专门提供了读写文件的子类:门提供了读写文件的子类:FileInputStream和和FileOutputSream类。如果程序对文件的操作比较简单,比如只是顺序地读写文件,类。如

17、果程序对文件的操作比较简单,比如只是顺序地读写文件,那么就可以使用那么就可以使用FileInputStream和和FileOutputSream类创建的流类创建的流对文件进行读写操作。对文件进行读写操作。 1 1创建文件字节输创建文件字节输出出流流 FileOutputStream FileOutputStream类创建的对象被称作文件字节输出流。类创建的对象被称作文件字节输出流。 构造方法构造方法: FileOutputStream FileOutputStream(String nameString name) FileOutputStream(File file) FileOutputS

18、tream(File file) 2 2以字节为单位写文件以字节为单位写文件 readread方法的格式如下:方法的格式如下: public void write(byte b); public void write(byte b); public void write(byte b,int off,int len); public void write(byte b,int off,int len); 1512.3.1 文件字节输入流文件字节输入流 1 1创建文件字节输入流创建文件字节输入流 FileInputStream FileInputStream类创建的对象被称作文件字节输入流。类创

19、建的对象被称作文件字节输入流。 构造方法构造方法: FileInputStream(String name); FileInputStream(String name); FileInputStream(File file); FileInputStream(File file); 读取一个名为读取一个名为hello.txthello.txt的文件,建立一个文件输入流对象,如下所示:的文件,建立一个文件输入流对象,如下所示: try FileInputStream in = new FileInputStream(hello.txt); try FileInputStream in = new

20、 FileInputStream(hello.txt); catch (IOException e) catch (IOException e) System.out.println(File read error:+e ); System.out.println(File read error:+e ); 2 2 readread方法方法以字节为单位读文件以字节为单位读文件 int read(); int read(); int read(byte b); int read(byte b); int read(byte b,int off,int len); int read(byte b,

21、int off,int len); 16例子4 例子4使用文件字节输入流读取文件,将文件的内容显示在屏幕上。程序运行效果如图10.4。1712.3.2 文件字节输出流文件字节输出流 1 1创建文件字节输创建文件字节输出出流流 FileOutputStream FileOutputStream类创建的对象被称作文件字节输出流。类创建的对象被称作文件字节输出流。 构造方法构造方法: FileOutputStream FileOutputStream(String nameString name) FileOutputStream(File file) FileOutputStream(File f

22、ile) 2 2以字节为单位写文件以字节为单位写文件 readread方法的格式如下:方法的格式如下: public void write(byte b); public void write(byte b); public void write(byte b,int off,int len); public void write(byte b,int off,int len); 例题例题 5 5使用文件字节输出流写文件,将“国庆60周年”和“十一快乐”写入到名字为happy.txt的文件中。1812.4 文件字符流文件字符流 1 1FileReader和和FileWriter用来创建文件字符

23、输入、输用来创建文件字符输入、输出出流,流,构造方法构造方法: FileReader(String filename); FileReader(String filename); FileReader(File filename); FileReader(File filename); FileWriter (String filename); FileWriter (String filename); FileWriter (File filename); FileWriter (File filename); 2 2字符输入流和输出流的字符输入流和输出流的readread和和writewr

24、ite方法方法以字符为基本单位以字符为基本单位处理数据。处理数据。 例题例题6 6使用字符输出流将一段文字存入文件,然后再使用字符输入流读去文件1912.5 缓冲流缓冲流 1 1BufferedReaderBufferedReader和和BufferedWriterBufferedWriter类创建的对象称作缓冲类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。流。 构造方法构造方法: BufferedReader(Reader in); BufferedReader(Reader in); Buffered

25、Writer (Writer out); BufferedWriter (Writer out); 2 2 BufferedReaderBufferedReader和和BufferedWriterBufferedWriter类读写文件的方法:类读写文件的方法: readLine() readLine() BufferedReaderBufferedReader流读取文本行流读取文本行 write(String s,int off,int len) write(String s,int off,int len)BufferedWriterBufferedWriter流把字符串流把字符串s s写到

26、文件中写到文件中 newLine();newLine(); BufferedWriter BufferedWriter流向文件写入一个回行符流向文件写入一个回行符 20例子7例子7使用BufferedWriter流把字符串按行写入文件,然后再使用BufferedReader流按行读取文件。程序运行效果如图10.6。2112.6 随机流随机流 使 用使 用 R a n d o m A c c e s s F i l eR a n d o m A c c e s s F i l e 类 来 创 建 一 个 随 机 访 问 文 件 流 。类 来 创 建 一 个 随 机 访 问 文 件 流 。Rand

27、omAccessFileRandomAccessFile类创建的流的指向既可以作为源也可以作为目的地。类创建的流的指向既可以作为源也可以作为目的地。 构造方法构造方法: RandomAccessFile(String name,String mode) ; RandomAccessFile(String name,String mode) ; RandomAccessFile(File file,String mode) ; RandomAccessFile(File file,String mode) ; 相关方法:相关方法: seek(long a) seek(long a) 定位定位Ra

28、ndomAccessFileRandomAccessFile流的读写位置流的读写位置 getFilePointer() getFilePointer() 获取流的当前读写位置获取流的当前读写位置 例题例题8 8中把几个int型整数写入到一个名字为tom.dat文件中,然后按相反顺序读出这些数据。 表表10.1 10.1 RandomAccessFileRandomAccessFile类的常用方法类的常用方法 处理处理readLine()readLine()方法方法在读取含有非在读取含有非ASCIIASCII字符的文件时出现字符的文件时出现“乱码乱码”现现象的方法:象的方法:1 1读取读取 St

29、ring str=in.readLine();String str=in.readLine();2 2用用“iso-8859-1iso-8859-1”重新编码重新编码 byte b=str.getBytes(iso-8859-1);byte b=str.getBytes(iso-8859-1);3 3使用当前机器的默认编码将字节数组转化为字符串使用当前机器的默认编码将字节数组转化为字符串 String content=new String(b); String content=new String(b); 例题例题9 9 RondomAccessFile流使用readLine()读取文件222

30、022-5-1112.7 数组流数组流 1 1字节数组流字节数组流 字 节 数 组 输 入 流字 节 数 组 输 入 流 B y t e A r r a y I n p u t S t r e a mB y t e A r r a y I n p u t S t r e a m 和 字 节 数 组 输 出 流和 字 节 数 组 输 出 流ByteArrayOutputStreamByteArrayOutputStream分别使用字节数组作为流的源和目标。分别使用字节数组作为流的源和目标。 ByteArrayInputStreamByteArrayInputStream构造方法及构造方法及常用方

31、法常用方法 ByteArrayInputStream(byte buf); ByteArrayInputStream(byte buf); ByteArrayInputStream(byte buf,int offset,int length); ByteArrayInputStream(byte buf,int offset,int length); public int read();public int read();顺序地从源中读出一个字节顺序地从源中读出一个字节 public int read(byte b,int off,int len);public int read(byte

32、b,int off,int len);顺序地从源中读出参数顺序地从源中读出参数lenlen指指定的字节数定的字节数 ByteArrayOutputStreamByteArrayOutputStream流流构造方法及构造方法及常用方法常用方法 ByteArrayOutputStream(); ByteArrayOutputStream(); ByteArrayOutputStream(int size); ByteArrayOutputStream(int size); public void write(int b); public void write(int b); 顺序地向缓冲区写入一个

33、字节顺序地向缓冲区写入一个字节 public void write(byte b,int off,int len); public void write(byte b,int off,int len); 将参数将参数b b中指定的中指定的lenlen个个字节顺序地写入缓冲区字节顺序地写入缓冲区 public byte toByteArray(); public byte toByteArray(); 返回输出流写入到缓冲区的全部字节返回输出流写入到缓冲区的全部字节 2字符数组字符数组 CharArrayReaderCharArrayReader和和CharArrayWriterCharArra

34、yWriter类类是字符数组流是字符数组流,字符数组流分别使用,字符数组流分别使用字符数组作为流的源和目标。字符数组作为流的源和目标。 例题例题10102312.8 数据流数据流 DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream类类创建的对象称为数创建的对象称为数据输入流和数据输出流。据输入流和数据输出流。 构造方法构造方法DataInputStreamDataInputStream(InputStream inInputStream in)创建的数据输入流指向一个由参数创建的数据输入流指向一个由参数inin指定的

35、底层输入流指定的底层输入流DataOutputStreamDataOutputStream(OutnputStream outOutnputStream out)创建的数据输出流指向一个由参数创建的数据输出流指向一个由参数outout指定的底层输指定的底层输出流出流表表10.210.2是是DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream类的常用方法类的常用方法 例题例题11 11 写几个Java类型的数据到一个文件,然后再读出来 24例子12例子12将字符串加密后写入文件,然后读取该文件,并解密内容,运行效果如图1

36、0.7。2512.9 对象流对象流 ObjectInputStreamObjectInputStream和和ObjectOutputStreamObjectOutputStream类类创建的对象创建的对象称为对象输入流和对象输出流。称为对象输入流和对象输出流。 它的构造方法是:它的构造方法是: ObjectInputStream(InputStream in) ObjectInputStream(InputStream in) ObjectOutputStream(OutputStream out) ObjectOutputStream(OutputStream out) 相关方法:相关方法:

37、 writeObject(Object obj)writeObject(Object obj) 将一个对象将一个对象obj写入到一个文件写入到一个文件 readObject() readObject() 读取一个对象到程序中读取一个对象到程序中 所谓序列化:一个类如果实现了所谓序列化:一个类如果实现了Serializable接口,那么这个接口,那么这个类创建的对象就是所谓序列化的对象。类创建的对象就是所谓序列化的对象。 2612.10 序列化与对象克隆序列化与对象克隆 如果一个如果一个“复制品复制品”实体的变化不会引起原对象实实体的变化不会引起原对象实体发生变化,反之亦然。这样的复制品称为原对

38、象的一体发生变化,反之亦然。这样的复制品称为原对象的一个克隆对象或简称克隆。个克隆对象或简称克隆。 一个对象调用一个对象调用clone()方法就可以获取该对象的克隆方法就可以获取该对象的克隆对象。对象。 对象输入流通过对象的序列化信息来得到当前对象对象输入流通过对象的序列化信息来得到当前对象的一个克隆。的一个克隆。 27例子13例子13使用对象流读写TV类创建的对象。程序运行效果如图10.8。2812.11 文件锁文件锁 FileLockFileLock、FileChannelFileChannel类类处理处理JavaJava提供的文件锁功提供的文件锁功能。它们分别在能。它们分别在java.n

39、iojava.nio和包中。和包中。 输入、输出流读写文件时可以使用文件锁。输入、输出流读写文件时可以使用文件锁。 RondomAccessFile创建的流在读写文件时使用文件创建的流在读写文件时使用文件锁的步骤如下:锁的步骤如下:1 1先使用先使用RondomAccessFileRondomAccessFile流建立指向文件的流对象,该对象的读写属性必流建立指向文件的流对象,该对象的读写属性必须是须是rwrw,例如:例如: RandomAccessFile input=new RandomAccessFile(Example.java,rw); RandomAccessFile input=

40、new RandomAccessFile(Example.java,rw);2 2nputnput流调用方法流调用方法getChannel()getChannel()获得一个连接到地层文件的获得一个连接到地层文件的FileChannelFileChannel对对象(信道),例如象(信道),例如 FileChannel channel=input.getChannel(); FileChannel channel=input.getChannel();3 3信道调用信道调用tryLock()tryLock()或或lock()lock()方法获得一个方法获得一个FileLockFileLock(文

41、件锁)对象,这文件锁)对象,这一过程也称作对文件加锁,例如:一过程也称作对文件加锁,例如:FileLock lock=channel.tryLock();FileLock lock=channel.tryLock(); 29例子14例子14中,Java程序让用户从键盘输入一个正整数,然后程序读取文件的内容,比如输入整数2,程序顺序读取文件中2行的内容。程序首先释放文件锁,然后读取文件内容,读取之后立刻给文件加锁,等待用户输入下一个整数。因此,在用户输入下一个整数之前,其他程序无法操作被当前用户加锁的文件。比如其他用户试图使用Windows操作系统提供“记事本”程序(Notepad.exe)无法

42、保存被当前Java程序加锁的文件。3012.12 使用使用ScannerScanner解析文件解析文件 使用使用ScannerScanner类和正则表达式来解析文件。类和正则表达式来解析文件。1 1使用默认分隔标记解析文件使用默认分隔标记解析文件 创建创建ScannerScanner对象,并指向要解析的文件,例如:对象,并指向要解析的文件,例如: File file = new File(hello.java);File file = new File(hello.java); Scanner sc = new Scanner(file); Scanner sc = new Scanner(f

43、ile); scsc将空白作为分隔标记将空白作为分隔标记 相关方法:相关方法: next() next() 依次返回依次返回filefile中的单词中的单词 hasNext() hasNext() 判断判断filefile最后一个单词是否已被最后一个单词是否已被next()next()方法返回方法返回2 2使用正则表达式作为分隔标记解析文件使用正则表达式作为分隔标记解析文件 创建创建Scanner对象,指向要解析的文件,并使用对象,指向要解析的文件,并使用useDelimiter方法指定正则表达式作为方法指定正则表达式作为分隔标记,例如分隔标记,例如: File file = new File

44、(hello.java); File file = new File(hello.java); Scanner sc = new Scanner(file); Scanner sc = new Scanner(file); sc.useDelimiter( sc.useDelimiter(正则表达式正则表达式);); scsc将正则表达式作为分隔标记将正则表达式作为分隔标记 相关方法:相关方法: next() next() 依次返回依次返回filefile中的单词中的单词 hasNext() hasNext() 判断判断filefile最后一个单词是否已被最后一个单词是否已被next()next()方法返回方法返回31例子15例子15使用Scanner对象解析文件cost.txt中的全部消费:1876,98,198,然后计算出总消费。程序运行效果如图10.9。32例子16例子16使用正则表达式(匹配所有非数字字符串):String regex=0123456789.+; 作为分隔标记解析student.txt文件中的学生成绩,并计算平均成绩(程序运行效果如图10.10)。student.txt的内容:的内容:张三的成绩是72分,李四成绩是69分,刘小林的成绩是95分。33

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁