输入输出处理(第8章).ppt

上传人:cl****1 文档编号:568611021 上传时间:2024-07-25 格式:PPT 页数:49 大小:334KB
返回 下载 相关 举报
输入输出处理(第8章).ppt_第1页
第1页 / 共49页
输入输出处理(第8章).ppt_第2页
第2页 / 共49页
输入输出处理(第8章).ppt_第3页
第3页 / 共49页
输入输出处理(第8章).ppt_第4页
第4页 / 共49页
输入输出处理(第8章).ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《输入输出处理(第8章).ppt》由会员分享,可在线阅读,更多相关《输入输出处理(第8章).ppt(49页珍藏版)》请在金锄头文库上搜索。

1、主要内容9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化9.1 I/O流的概念和划分n数据流(Stream)是一组有顺序的、有起点和终点的字节集合,是对输入和输出的总称和抽象。 nJava程序通过流来完成输入/输出。流通过Java的输入/输出系统与物理设备物理设备链接。 数据源DataSource程序program数据接收器DataSink思考?n数据流会带来哪些好处?Java流的划分 n字节流类字节流类n处理字节的输入和输出提供了方便的方法 n字符流类字符流类 n为字符的输入和输出处理提供了方便 n读写数据的单位不同n最主要的是Read(

2、) 和Write() 方法n每个流的特点字节流输入类字节流输入类 字节输出类字符输入流类字符输出流主要内容9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化7.2 文件的操作文件的操作nFile类:对文件的引用和表示nFile类提供了一些方法来操纵文件和获取文件的信息。对于目录,Java把它当作一种特殊类型的文件,即文件名单列表。nFile类直接处理文件和文件系统类直接处理文件和文件系统。通过File类的方法,可以得到文件或者目录的描述信息,包括名称、所在路径、读写性、长度等,还可以创建目录、创建文件,改变文件名、删除文件、列出目录中的文件等

3、。 File对象的构造nFile(String path)nFile(String dir, String filename)nFile(File dir, String filename)nFile(URI uri)File f1 = new File(D:/Java);File f2 = new File(D:/Java,test.txt);File f3 = new File(f1,test.txt);File f4 = new File(file:/D:/Java/test.txt);File类的方法nboolean canRead()测试文件是否可读nboolean createNe

4、wFile()创建新文件nboolean delete()删除文件nFile getAbsoluteFile()返回绝对文件名nboolean isDirectory()是否是目录nlong lastModified()上次修改时间,从1970年1月1号开始的标准时间(UTC)的毫秒数n具体见程序例子:File的使用nFileDemo.java目录的操作n目录是一个包含其他文件和路径列表的File 类。当你创建一个File 对象且它是目录时,isDirectory( ) 方法返回ture。nString list( )n文件列表在一个String 对象数组中返回。nFile listFiles

5、( )n文件列表在一个File对象的数组中返回。过滤文件n我们有时需要列出目录下指定类型的文件,比如.java、.class等扩展名的文件。可以使用File类的下述三个方法,列出指定类型的文件。nString list(FilenameFilter FFObj)nFile listFiles(FilenameFilter FFObj)nFile listFiles(FileFilter FObj)过滤接口nFilenameFilter仅定义了一个方法,accept( )。调用list方法列出文件时,将调用accept()方法检查该文件name是否符合accept方法指定的名字要求。它的通常形式

6、如下:nboolean accept(File directory, String filename)nFileFilter只定义了一个accept( )方法,该方法被列表中的每个文件调用一次。它的通常形式如下:nboolean accept(File path)。 n参考例子nDirDemo.java主要内容9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化9.3 字节流处理nInputStream/OutputStream n标准输入/出流 n文件字节流 n过滤流 n随机存取文件 n其它字节流 9.3.1 InputStreamnint

7、read( )nint read(byte b )nint read(byte b , int offset, int len)nint available( )nvoid close( )nvoid mark(int readlimit)nboolean markSupported( )nvoid reset( )nlong skip(long n)OutputStreamnvoid close( )nvoid flush( )nvoid write(int b)nvoid write(byte b )nvoid write(byte b , int offset, int len)9.3.

8、2 标准输入/出流 nJava通过系统类System实现标准输入输出的功能,定义了3个流变量,in,out和err。nstatic PrintStream err nstatic InputStream in nstatic PrintStream out n通过read()方法从键盘接受数据。n见程序nStdInput.java标准输出nSystem.out作为打印流类PrintStream的对象out实现标准输出。n其中定义了Print和Println方法,支持Java任意基本类型作为参数。nJava5.0对PrintStream类进行了扩充,支持数据的格式化输出,增加了printf()方

9、法。npublic PrintStream printf(String format, Object. args)npublic PrintStream printf(Locale l, String format, Object.args)从标准输入读取正数JDK5.0新功能import java.util.Scanner;public class TestScanner public static void main(String args) Scanner cin = new Scanner(System.in);int a = cin.nextInt(), b = cin.nextIn

10、t();System.out.println(a + b);9.3.3 文件字节流 nInputStream和OutputStream都是抽象类,不能实例化,因此在实际应用中都使用的是他们的子类。nFileInputStream和FileOutputStream用于进行文件的输入输出处理,其数据源和接收器都是文件。 FileInputStreamnFileInputStream用于顺序访问本地文件,对文件进行操作,不支持mark方法和reset方法。它的两个常用的构造函数如下:nFileInputStream(String filepath)nFileInputStream(File file

11、Obj)nFileInputStream f1 = new FileInputStream(Test.java)nFile f = new File(Test.java);nFileInputStream f2 = new FileInputStream(f);n能引发能引发FileNotFoundException异常异常 FileOutputStreamnFileOutputStream用于向一个文本文件写数据。它从超类中继承write,close等方法。它常用的构造函数如下:nFileOutputStream(String filePath)nFileOutputStream(File

12、fileObj)nFileOutputStream(String filePath, boolean append)nFileOutputStream(File fileObj, boolean append)n它们可以引发IOException或SecurityException异常 FileOutputStreamnFileOutputStream重写了抽象类OutputStream的写数据的方法:npublic void write(byte b) throws IOExceptionnpublic void write(byte b, int off, int len)throws I

13、OExceptionnpublic void write(int b) throws IOExceptionnb是int类型时,占用4个字节,只有最低的一个字节被写入输出流,忽略其余字节。n 见程序:文件拷贝nFileStreamCopy.java9.3.4 过滤流n过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个I/O流,以防止多个线程同时对一个I/O流进行操作所带来的意想不到的结果。n这些过滤字节流是FilterInputStream 和FilterOutputStream。它们的构造函数如下:nFilterOutputStream(Out

14、putStream os)nFilterInputStream(InputStream is)n为了使用一个过滤流,必须首先把过滤流连接到某个为了使用一个过滤流,必须首先把过滤流连接到某个输入输入/出流上,通过在构造方法的参数中指定所要连接出流上,通过在构造方法的参数中指定所要连接的输入的输入/出流来实现出流来实现BufferedInputStreamBufferedOutputStream nBufferedInputStream(InputStream input)nBufferedInputStream(InputStream input, int bufSize)nBufferedIn

15、putStream. markSupported( )返回true。BufferedInputStream 支持mark( ) 和reset( )方法。nBufferedOutputStream(OutputStream output)nBufferedOutputStream(OutputStream output, int bufSize)n具体见程序nBufferedStreamCopy.java9.3.5 随机存取文件 n对于InputStream和OutputStream,他们都是顺序访问流,从头至尾访问流,并且输入流只能读,不能写,输出流只能写,不能读,即对对一个文件不能同时进行读

16、写一个文件不能同时进行读写。nRandomAccessFile类提供了一种称为“随机访问文件”方式,可以:n对一个文件同时进行读写操作,n可以在文件的任意位置进行读写操作。RandomAccessFile 的使用nRandomAccessFile(String name,String mode) throws FileNotFoundException;nRandomAccessFile(File file,String mode) throws FileNotFoundException;n其中,file识别文件路径,mode指定参数访问模式:r表示读,w表示写,rw表示读写。当文件不存在时

17、,构造方法将抛出FileNotFoundException。RandomAccessFile的方法npublic long length() 返回文件的长度nvoid setLength(long len) 设置文件的新长度npublic void seek(long pos) 改变文件指针位置npublic final int readInt() 读入一个整数类型,npublic final void writeInt(int v) 写一个整数,npublic long getFilePointer() 获取文件指针位置。npublic int skipBytes(int n) 跳过n个字节

18、nclose(); 关闭文件n见程序nRandomFileDemo.java9.3.6其它字节流nByteArrayInputStreamnByteArrayOutputStream nSequenceInputStream nPushbackInputStream 主要内容9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化9.4 字符流处理nReader/Writern文件字符流n字节流和字符流的转化9.4.1 Reader/WriternReader是定义Java的字符流输入模式的抽象类。该类的所有方法在出错情况下都将引发IOExcept

19、ion 异常。 nWriter是定义Java的字符流输出模式的抽象类。该类的所有方法都返回一个void值,在出错情况下都将引发IOException 异常。 Reader类的方法nabstract void close( )nvoid mark(int numChars)nboolean markSupported( )nint read( )nint read(char buffer )nabstract int read(char b ,int offset,int len )nboolean ready( )nvoid reset( )nlong skip(long n)Writer类的

20、方法nabstract void close( )nabstract void flush( )nvoid write(int ch)nvoid write(char buffer )nabstract void write(char b ,int offset,int len)nvoid write(String str)nvoid write(String str, int offset,int len)npublic Writer append(char c)npublic Writer append(CharSequence csq)npublic Writer append(Char

21、Sequence csq, int start, int end)9.4.2文件字符流nFileReader类是一个以字符方式读取文件内容的Reader类的子类。nFileReader(String filePath)nFileReader(File fileObj)nFileWriter类是一个以字符方式写文件内容的类是一个以字符方式写文件内容的Writer类的子类。类的子类。nFileWriter(String filePath)nFileWriter(String filePath, boolean append)nFileWriter(File fileObj)n n见程序见程序n n

22、FileReaderWriterDemo.javaFileReaderWriterDemo.java解析文本文件的数据nScannernPrintWriter / ScannerPrintWriterDemo.javaimport java.io.File;import java.io.FileNotFoundException;import java.io.PrintWriter;import java.util.Scanner;public class ScannerPrintWriterDemo public static void main(String args) Scanner s

23、 = null;PrintWriter pw = null;try / 从源文件输入,使用Scanner读入由空白字符分割的文本文件内容是很方便的s = new Scanner(new File(source.txt);/ 使用PrintWriter进行格式化输出pw = new PrintWriter(dest.txt);while (s.hasNextLine() String strLine = s.nextLine();/ 调用方法求每一行的和int sum = getLineSum(strLine);/ 输出每一行pw.println(strLine + t + sum); catc

24、h (FileNotFoundException e) e.printStackTrace(); finally / 关闭输入流和输出流if (s != null)s.close();if (pw != null)pw.close();/ 计算每一行的和的方法private static int getLineSum(String strLine) / 使用Scanner分割每一行为多个整数Scanner s = new Scanner(strLine);int sum = 0;while (s.hasNextInt() sum += s.nextInt();return sum;9.4.3字

25、节流向字符流的转化n字节流和字符流是Java提供的两种输入输出处理方式。n字节流以单个字节为读/写单位,字符流以字符为读/写单位。一般字符由多个字节组成。nInputStreamReader和OutputStreamWriter用来在字节和字符之间作为中介,可以把以字节形式表示的流转化为特定的平台上的字符表示。n可以从一个字节流构造一个字符流对象。我们可以在构造这些流对象时指定字符编码规范,也可以用当前平台的缺省编码规范。 InputStreamReadernpublic InputStreamReader(InputStream in)npublic InputStreamReader(In

26、putStream in, String charsetName) throws UnsupportedEncodingExceptionnpublic InputStreamReader(InputStream in, Charset cs)npublic InputStreamReader(InputStream in, CharsetDecoder dec)File file = new File(src/StreamToReaderWriter.java);FileInputStream fin = new FileInputStream(file);InputStreamReader

27、 isr = new InputStreamReader(fin, GBK); OutputStreamWriter npublic OutputStreamWriter(OutputStream out)npublic OutputStreamWriter(OutputStream out, String charsetName) throws UnsupportedEncodingExceptionnpublic OutputStreamWriter(OutputStream out, Charset cs)npublic OutputStreamWriter(OutputStream o

28、ut, CharsetEncoder enc)FileOutputStream fout = new FileOutputStream(copy-of-file.txt);OutputStreamWriter osw = new OutputStreamWriter(fout, GBK);见程序 StreamToReaderWriter.java主要内容9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化9.5 串行化n串行化的概念 n串行化的方法 n定制串行化串行化的概念n对象的寿命通常随着生成该对象的程序的终止而终止。某些时候,需要将对象的

29、状态保存下来,将来需要的时候可以恢复。n把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性持续性(persistence)。对象通过写出描述自己状态的数值来记录自己的过程,叫做对象的串行化串行化(Serialization)。n串行化的主要任务是写出对象实例变量的数值实例变量的数值。如果变量是另一对象的一引用,则引用的对象也要串行化。这个过程是递归的。 串行化的方法nSerializable n只有实现Serializable接口的对象才可以被串行化工具存储和恢复。Serializable接口没有定义任何成员。它只用来表示一个类可以被串行化。如果一个类可以串行化,它的所有子类都可

30、以串行化。n关键字transient表示一个成员变量不是该对象串行化的一部分。读/写对象nObjectOutputStream npublic class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstantsnObjectOutputStream (OutputStream out) throws IOExceptionnfinal void writeObject(Object obj)nObjectInputStream npublic class ObjectInput

31、Stream extends InputStream implements ObjectInput, ObjectStreamConstants nObjectInputStream(InputStream in) throws IOException, StreamCorruptedExceptionnObject readObject( )读/写对象FileOutputStream fout = new FileOutputStream(data1.ser);ObjectOutputStream oout = new ObjectOutputStream(fout);FileInputStream fin = new FileInputStream(data1.ser);ObjectInputStream oin = new ObjectInputStream(fin);见程序SerializableDemo.java

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号