欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

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

    • 资源ID:6611143       资源大小:220KB        全文页数:49页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    主要内容,9.1 I/O流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化,9.1 I/O流的概念和划分,数据流(Stream)是一组有顺序的、有起点和终点的字节集合,是对输入和输出的总称和抽象。Java程序通过流来完成输入/输出。流通过Java的输入/输出系统与物理设备链接。,思考?,数据流会带来哪些好处?,Java流的划分,字节流类处理字节的输入和输出提供了方便的方法 字符流类 为字符的输入和输出处理提供了方便 读写数据的单位不同最主要的是Read()和Write()方法每个流的特点,字节流输入类,字节输出类,字符输入流类,字符输出流,主要内容,9.1 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,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()是否是目录long lastModified()上次修改时间,从1970年1月1号开始的标准时间(UTC)的毫秒数具体见程序例子:File的使用FileDemo.java,目录的操作,目录是一个包含其他文件和路径列表的File 类。当你创建一个File 对象且它是目录时,isDirectory()方法返回ture。String list()文件列表在一个String 对象数组中返回。File listFiles()文件列表在一个File对象的数组中返回。,过滤文件,我们有时需要列出目录下指定类型的文件,比如.java、.class等扩展名的文件。可以使用File类的下述三个方法,列出指定类型的文件。String 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()方法,该方法被列表中的每个文件调用一次。它的通常形式如下: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)boolean 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()方法从键盘接受数据。见程序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 class 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,FileInputStream用于顺序访问本地文件,对文件进行操作,不支持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用于向一个文本文件写数据。它从超类中继承write,close等方法。它常用的构造函数如下:FileOutputStream(String filePath)FileOutputStream(File fileObj)FileOutputStream(String filePath,boolean append)FileOutputStream(File fileObj,boolean append)它们可以引发IOException或SecurityException异常,FileOutputStream,FileOutputStream重写了抽象类OutputStream的写数据的方法:public 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流进行操作所带来的意想不到的结果。这些过滤字节流是FilterInputStream 和FilterOutputStream。它们的构造函数如下:FilterOutputStream(OutputStream os)FilterInputStream(InputStream is)为了使用一个过滤流,必须首先把过滤流连接到某个输入/出流上,通过在构造方法的参数中指定所要连接的输入/出流来实现,BufferedInputStreamBufferedOutputStream,BufferedInputStream(InputStream input)BufferedInputStream(InputStream input,int bufSize)BufferedInputStream.markSupported()返回true。BufferedInputStream 支持mark()和reset()方法。BufferedOutputStream(OutputStream output)BufferedOutputStream(OutputStream output,int bufSize)具体见程序BufferedStreamCopy.java,9.3.5 随机存取文件,对于InputStream和OutputStream,他们都是顺序访问流,从头至尾访问流,并且输入流只能读,不能写,输出流只能写,不能读,即对一个文件不能同时进行读写。RandomAccessFile类提供了一种称为“随机访问文件”方式,可以:对一个文件同时进行读写操作,可以在文件的任意位置进行读写操作。,RandomAccessFile 的使用,RandomAccessFile(String name,String mode)throws FileNotFoundException;RandomAccessFile(File file,String mode)throws FileNotFoundException;其中,file识别文件路径,mode指定参数访问模式:r表示读,w表示写,rw表示读写。当文件不存在时,构造方法将抛出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();关闭文件见程序RandomFileDemo.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的字符流输出模式的抽象类。该类的所有方法都返回一个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 flush()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类是一个以字符方式读取文件内容的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 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=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);catch(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字节流向字符流的转化,字节流和字符流是Java提供的两种输入输出处理方式。字节流以单个字节为读/写单位,字符流以字符为读/写单位。一般字符由多个字节组成。InputStreamReader和OutputStreamWriter用来在字节和字符之间作为中介,可以把以字节形式表示的流转化为特定的平台上的字符表示。可以从一个字节流构造一个字符流对象。我们可以在构造这些流对象时指定字符编码规范,也可以用当前平台的缺省编码规范。,InputStreamReader,public InputStreamReader(InputStream in)public InputStreamReader(InputStream in,String charsetName)throws UnsupportedEncodingExceptionpublic InputStreamReader(InputStream in,Charset cs)public InputStreamReader(InputStream in,CharsetDecoder 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 UnsupportedEncodingExceptionpublic 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流的概念和划分 9.2 文件的操作 9.3 字节流处理 9.4 字符流处理9.5 串行化,9.5 串行化,串行化的概念 串行化的方法 定制串行化,串行化的概念,对象的寿命通常随着生成该对象的程序的终止而终止。某些时候,需要将对象的状态保存下来,将来需要的时候可以恢复。把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己的过程,叫做对象的串行化(Serialization)。串行化的主要任务是写出对象实例变量的数值。如果变量是另一对象的一引用,则引用的对象也要串行化。这个过程是递归的。,串行化的方法,Serializable 只有实现Serializable接口的对象才可以被串行化工具存储和恢复。Serializable接口没有定义任何成员。它只用来表示一个类可以被串行化。如果一个类可以串行化,它的所有子类都可以串行化。关键字transient表示一个成员变量不是该对象串行化的一部分。,读/写对象,ObjectOutputStream public class ObjectOutputStream extends OutputStream implements ObjectOutput,ObjectStreamConstantsObjectOutputStream(OutputStream out)throws IOExceptionfinal 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,

    注意事项

    本文(输入输出处理(第8章).ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开