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

上传人:牧羊曲112 文档编号:6611143 上传时间:2023-11-17 格式:PPT 页数:49 大小:220KB
返回 下载 相关 举报
输入输出处理(第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流的概念和划分,数据流(Stream)是一组有顺序的、有起点和终点的字节集合,是对输入和输出的总称和抽象。Java程序通过流来完成输入/输出。流通过Java的输入/输出系统与物理设备链接。,思考?,数据流会带来哪些好处?,Java流的划分,字节流类处理字节的输入和输出提供了方便的方法 字符流类 为字符的输入和输出处理提供了方便 读写数据的单位不同最主要的是Read()和Write()方法每个流的特点,字节流输入类,字节输出类,字符输入流类,字符输出流,主要内容,9.1

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

3、,String filename)File(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类的方法,boolean canRead()测试文件是否可读boolean createNewFile()创建新文件boolean delete()删除文件File getAbsoluteFile()返回绝对文件名boolean isDirectory()是否是目

4、录long lastModified()上次修改时间,从1970年1月1号开始的标准时间(UTC)的毫秒数具体见程序例子:File的使用FileDemo.java,目录的操作,目录是一个包含其他文件和路径列表的File 类。当你创建一个File 对象且它是目录时,isDirectory()方法返回ture。String list()文件列表在一个String 对象数组中返回。File listFiles()文件列表在一个File对象的数组中返回。,过滤文件,我们有时需要列出目录下指定类型的文件,比如.java、.class等扩展名的文件。可以使用File类的下述三个方法,列出指定类型的文件。S

5、tring list(FilenameFilter FFObj)File listFiles(FilenameFilter FFObj)File listFiles(FileFilter FObj),过滤接口,FilenameFilter仅定义了一个方法,accept()。调用list方法列出文件时,将调用accept()方法检查该文件name是否符合accept方法指定的名字要求。它的通常形式如下:boolean accept(File directory,String filename)FileFilter只定义了一个accept()方法,该方法被列表中的每个文件调用一次。它的通常形式如下

6、:boolean accept(File path)。参考例子DirDemo.java,主要内容,9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化,9.3 字节流处理,InputStream/OutputStream 标准输入/出流 文件字节流 过滤流 随机存取文件 其它字节流,9.3.1 InputStream,int read()int read(byte b)int read(byte b,int offset,int len)int available()void close()void mark(int readlimit)boo

7、lean markSupported()void reset()long skip(long n),OutputStream,void close()void flush()void write(int b)void write(byte b)void write(byte b,int offset,int len),9.3.2 标准输入/出流,Java通过系统类System实现标准输入输出的功能,定义了3个流变量,in,out和err。static PrintStream err static InputStream in static PrintStream out 通过read()方法从

8、键盘接受数据。见程序StdInput.java,标准输出,System.out作为打印流类PrintStream的对象out实现标准输出。其中定义了Print和Println方法,支持Java任意基本类型作为参数。Java5.0对PrintStream类进行了扩充,支持数据的格式化输出,增加了printf()方法。public PrintStream printf(String format,Object.args)public PrintStream printf(Locale l,String format,Object.args),从标准输入读取正数,JDK5.0新功能;public c

9、lass TestScanner public static void main(String args)Scanner cin=new Scanner(System.in);int a=cin.nextInt(),b=cin.nextInt();System.out.println(a+b);,9.3.3 文件字节流,InputStream和OutputStream都是抽象类,不能实例化,因此在实际应用中都使用的是他们的子类。FileInputStream和FileOutputStream用于进行文件的输入输出处理,其数据源和接收器都是文件。,FileInputStream,FileInpu

10、tStream用于顺序访问本地文件,对文件进行操作,不支持mark方法和reset方法。它的两个常用的构造函数如下:FileInputStream(String filepath)FileInputStream(File fileObj)FileInputStream f1=new FileInputStream(Test.java)File f=new File(Test.java);FileInputStream f2=new FileInputStream(f);能引发FileNotFoundException异常,FileOutputStream,FileOutputStream用于向

11、一个文本文件写数据。它从超类中继承write,close等方法。它常用的构造函数如下:FileOutputStream(String filePath)FileOutputStream(File fileObj)FileOutputStream(String filePath,boolean append)FileOutputStream(File fileObj,boolean append)它们可以引发IOException或SecurityException异常,FileOutputStream,FileOutputStream重写了抽象类OutputStream的写数据的方法:publ

12、ic void write(byte b)throws IOExceptionpublic void write(byte b,int off,int len)throws IOExceptionpublic void write(int b)throws IOExceptionb是int类型时,占用4个字节,只有最低的一个字节被写入输出流,忽略其余字节。见程序:文件拷贝FileStreamCopy.java,9.3.4 过滤流,过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个I/O流,以防止多个线程同时对一个I/O流进行操作所带来的意想不到的

13、结果。这些过滤字节流是FilterInputStream 和FilterOutputStream。它们的构造函数如下:FilterOutputStream(OutputStream os)FilterInputStream(InputStream is)为了使用一个过滤流,必须首先把过滤流连接到某个输入/出流上,通过在构造方法的参数中指定所要连接的输入/出流来实现,BufferedInputStreamBufferedOutputStream,BufferedInputStream(InputStream input)BufferedInputStream(InputStream input,

14、int bufSize)BufferedInputStream.markSupported()返回true。BufferedInputStream 支持mark()和reset()方法。BufferedOutputStream(OutputStream output)BufferedOutputStream(OutputStream output,int bufSize)具体见程序BufferedStreamCopy.java,9.3.5 随机存取文件,对于InputStream和OutputStream,他们都是顺序访问流,从头至尾访问流,并且输入流只能读,不能写,输出流只能写,不能读,即对

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

16、出FileNotFoundException。,RandomAccessFile的方法,public long length()返回文件的长度void setLength(long len)设置文件的新长度public void seek(long pos)改变文件指针位置public final int readInt()读入一个整数类型,public final void writeInt(int v)写一个整数,public long getFilePointer()获取文件指针位置。public int skipBytes(int n)跳过n个字节close();关闭文件见程序Rand

17、omFileDemo.java,9.3.6其它字节流,ByteArrayInputStreamByteArrayOutputStream SequenceInputStream PushbackInputStream,主要内容,9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化,9.4 字符流处理,Reader/Writer文件字符流字节流和字符流的转化,9.4.1 Reader/Writer,Reader是定义Java的字符流输入模式的抽象类。该类的所有方法在出错情况下都将引发IOException 异常。Writer是定义Java的字符流

18、输出模式的抽象类。该类的所有方法都返回一个void值,在出错情况下都将引发IOException 异常。,Reader类的方法,abstract void close()void mark(int numChars)boolean markSupported()int read()int read(char buffer)abstract int read(char b,int offset,int len)boolean ready()void reset()long skip(long n),Writer类的方法,abstract void close()abstract void flu

19、sh()void write(int ch)void write(char buffer)abstract void write(char b,int offset,int len)void write(String str)void write(String str,int offset,int len)public Writer append(char c)public Writer append(CharSequence csq)public Writer append(CharSequence csq,int start,int end),9.4.2文件字符流,FileReader类是

20、一个以字符方式读取文件内容的Reader类的子类。FileReader(String filePath)FileReader(File fileObj)FileWriter类是一个以字符方式写文件内容的Writer类的子类。FileWriter(String filePath)FileWriter(String filePath,boolean append)FileWriter(File fileObj)见程序FileReaderWriterDemo.java,解析文本文件的数据,ScannerPrintWriter,/ScannerPrintWriterDemo.javaimport ja

21、va.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=null;PrintWriter pw=null;try/从源文件输入,使用Scanner读入由空白字符分割的文本文件内容是很方便的s=new Scanner(new File(source.txt);/使用PrintWriter进行格

22、式化输出pw=new PrintWriter(dest.txt);while(s.hasNextLine()String strLine=s.nextLine();/调用方法求每一行的和int sum=getLineSum(strLine);/输出每一行pw.println(strLine+t+sum);catch(FileNotFoundException e)e.printStackTrace();finally/关闭输入流和输出流if(s!=null)s.close();if(pw!=null)pw.close();/计算每一行的和的方法private static int getLin

23、eSum(String strLine)/使用Scanner分割每一行为多个整数Scanner s=new Scanner(strLine);int sum=0;while(s.hasNextInt()sum+=s.nextInt();return sum;,9.4.3字节流向字符流的转化,字节流和字符流是Java提供的两种输入输出处理方式。字节流以单个字节为读/写单位,字符流以字符为读/写单位。一般字符由多个字节组成。InputStreamReader和OutputStreamWriter用来在字节和字符之间作为中介,可以把以字节形式表示的流转化为特定的平台上的字符表示。可以从一个字节流构造

24、一个字符流对象。我们可以在构造这些流对象时指定字符编码规范,也可以用当前平台的缺省编码规范。,InputStreamReader,public InputStreamReader(InputStream in)public InputStreamReader(InputStream in,String charsetName)throws UnsupportedEncodingExceptionpublic InputStreamReader(InputStream in,Charset cs)public InputStreamReader(InputStream in,CharsetDec

25、oder dec),File file=new File(src/StreamToReaderWriter.java);FileInputStream fin=new FileInputStream(file);InputStreamReader isr=new InputStreamReader(fin,GBK);,OutputStreamWriter,public OutputStreamWriter(OutputStream out)public OutputStreamWriter(OutputStream out,String charsetName)throws Unsupport

26、edEncodingExceptionpublic OutputStreamWriter(OutputStream out,Charset cs)public OutputStreamWriter(OutputStream out,CharsetEncoder enc),FileOutputStream fout=new FileOutputStream(copy-of-file.txt);OutputStreamWriter osw=new OutputStreamWriter(fout,GBK);见程序 StreamToReaderWriter.java,主要内容,9.1 I/O流的概念和

27、划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化,9.5 串行化,串行化的概念 串行化的方法 定制串行化,串行化的概念,对象的寿命通常随着生成该对象的程序的终止而终止。某些时候,需要将对象的状态保存下来,将来需要的时候可以恢复。把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己的过程,叫做对象的串行化(Serialization)。串行化的主要任务是写出对象实例变量的数值。如果变量是另一对象的一引用,则引用的对象也要串行化。这个过程是递归的。,串行化的方法,Serializable

28、只有实现Serializable接口的对象才可以被串行化工具存储和恢复。Serializable接口没有定义任何成员。它只用来表示一个类可以被串行化。如果一个类可以串行化,它的所有子类都可以串行化。关键字transient表示一个成员变量不是该对象串行化的一部分。,读/写对象,ObjectOutputStream public class ObjectOutputStream extends OutputStream implements ObjectOutput,ObjectStreamConstantsObjectOutputStream(OutputStream out)throws I

29、OExceptionfinal void writeObject(Object obj)ObjectInputStream public class ObjectInputStream extends InputStream implements ObjectInput,ObjectStreamConstants ObjectInputStream(InputStream in)throws IOException,StreamCorruptedExceptionObject 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备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号