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

    计算机科学与技术.ppt

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

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

    计算机科学与技术.ppt

    第 9 章 Java输入/输出,本章内容,9.1 Java的I/O流9.2 File类9.3 RandomAccessFile类9.4 对象序列化9.5 小结SCJP认证习题解析,学习目标,掌握流式输入/输出的机制了解Java基本I/O类的结构掌握Java流式I/O类中定义的常用方法的使用掌握File对象的创建与操纵理解对象的串行化,9.1 Java的I/O流,流的概念字节流字符流I/O流的套接常用的I/O流类,9.1.1 流(Stream)的概念,在Java中,流是从源到目的地的字节的有序序列;流中的字节依据先进先出,具有严格的顺序,是一种顺序存取方式。,Input stream(输入流),程序-数据源(文件、内存)-打开一个流-读数据,流是有方向的:从输入流读入-不能写数据,Output stream(输出流),程序-数据-写入流-保存到目的地(文件、内存),流是有方向的:向输出流写入-不能读数据,流操作的过程,Reading:open a streamwhile more information read informationclose the stream,Writing:open a streamwhile more information write informationclose the stream,两种结构的流,Java中实现流式I/O的类都在java.io包中;这些类相对于Java程序的另一个端点的不同,分为节点流(Node Stream)和处理流(Processing Stream)。,节点流:从特定源如磁盘文件或内存某区域进行读或写入。处理流:使用其它的流作为输入源或输出目的地。,两种流类的体系,流式I/O类根据操作的数据类型(16位字符或8位字节)分成两个层次体系。,9.1.2 字节流,InputStream和OutputStream是字节流的两个顶层父类,提供了输入/输出流类的通用API;字节流一般用于读写二进制数据;ObjectInputStream和ObjectOutputStream用来实现对象的串行化,即对象的输入、输出。,InputStream,java.io 包中所有输入数据流都是由抽象类 InputStream 类继承而来,实现的主要方法有:,int read()该方法返回一个整数,它或者是从数据流中读取的一个字节,或者是-1,以标志数据流的结束。,int read()该方法返回一个整数,它或者是从数据流中读取的一个字节,或者是-1,以标志数据流的结束。,public int read(byte b)将读取的数据保存在一个字节数组中,并返回读取的字节数。,public int read(byte b,int off,int len)从输入流中读取len个字节存储在初始偏移量为off的字节数组中,返回实际读取的字节数。,void close()当结束对一个数据流的操作时应该将其关闭,同时释放与该数据流相关的资源;Java提供系统垃圾自动回收功能,所以当一个流对象不再使用时,可以由运行时系统自动关闭。为提高程序的安全性和可读性,建议读者还是养成显式关闭输入输出流的习惯。,int available()返回可以从数据流中读取的字节数。long skip(long l)跳过数据流中指定数量的字节不读,返回值表示实际跳过的字节数。,支持回推操作的数据流中的方法:boolean markSupported()用于指示数据流是否支持回推操作,当一个数据流支持方法时返回true,反之返回false。,void mark(int readlimit)用于标记数据流的当前位置。void reset()在执行完随后的read()操作后,调用方法reset()将回到输入数据流中被标记的位置。,输入字节流类的层次,OutputStream,与输入流类似,java.io包中所有输出数据流都是从抽象类OutputStream类继承而来,并且实现了其中所有方法。,void write(int i)将字节 i 写入到数据流。注意:该方法是抽象方法,其输出流子类必须加以实现。,public void write(byte b)将字节数组b的内容写入输出流。,public void write(byte b,int off,int len)将字节数组b中从偏移量off开始的len个字节写入输出流。,输出字节流类的层次,9.1.3 Reader 和 Writer,Java提供的对不同平台之间数据流中数据进行转换的功能。ASCII字符集是以一个字节(8bit)来表示一个字符,可以认为一个字符就是一个字节(byte);,Java使用Unicode表示字符串和字符,用两个字节(16bit)来表示一个字符,字节与字符就不再一样;为了实现与其他语言及不同平台进行交互,Java提供了一种16位的数据流处理方案,使得数据流中的数据可以进行与以往16位平台时的相同处理。这种16位方案被称作读者和写者。,字节流与字符流的比较,字节流与字符流的主要区别在于处理的数据类型;Reader/Writer与InputStream/OutputStream具有相类似的API,并且每个核心的输入/输出字节流,都有相应的Reader和Writer版本。,输入字符流类的层次,输出字符流类的层次,Reader类,public int read()读一个字符作为方法的返回值,如果返回-1,则表示到达流的末尾。public int read(char cbuf)读字符保存在数组中,并返回读取的字符数。,Reader类,public abstract int read(char cbuf,int off,int len)读字符存储在数组的指定位置,返回读取的字符数。public long skip(long n)从输入流中最多跳过n个字符,返回跳过的字符数。public boolean ready()当输入流准备好可以读取数据时返回true;否则返回false。,Reader类,public boolean markSupported()当输入流支持mark方法时返回true,否则返回false。public void mark(int readAheadLimit)标记当前的位置,参数用于设置从标记位置处开始可以读取的最大字符数。public void reset()将输入流重新定位到最后一次mark方法标记的位置。public abstract void close()关闭输入流,并释放与流关联的所有系统资源。,Writer类,public void write(int c)将参数c的低16个bit写入输出流。public void write(char cbuf)将字符数组cbuf的内容写入输出流。public abstract void write(char cbuf,int off,int len)将字符数组cbuf中,从偏移量off开始的len个字符写入输出流。,Writer类,public void write(String str)将字符串str中全部字符写入输出流。public void write(String str,int off,int len)将字符串str中,从偏移量off开始的len个字符写入输出流。public abstract void flush()刷新输出流,强制写出所有缓冲的输出字符。public abstract void close()关闭输出流,释放与该流相关联的所有系统资源。,9.1.4 输入/输出流的套接,数据源,程序,FileInputStream,BufferedInputStream,DataInputStream,示例:实现基本数据类型的读取,InputStreamReader is=new InputStreamReader(System.in);,BufferedReader in=new BufferedReader(is);,创建一个用于接收从键盘输入的字符数据的对象,创建一个BufferedReader对象从键盘逐行读入数据,数据接收节点,程序,FileOutputStream,BufferedOutputStream,DataOutputStream,示例:实现基本数据类型的写入,9.1.5 常用的I/O流类,java.io包中的节点流,java.io包中的节点流,java.io包中的节点流,java.io包中的节点流,java.io包中的处理流,java.io包中的处理流,java.io包中的处理流,java.io包中的处理流,FileInputStream/FileOutputStream,这两个类用来进行文件的I/O处理,其数据源应当是文件;构造文件数据流时,可直接给出文件名,例如:FileInputStream fis=new FileInputStream(myFile);FileOutputStream fos=new FileOutputStream(myFile);,常用构造方法:,public FileInputStream(String name)throws FileNotFoundException public FileInputStream(File file)throws FileNotFoundException,常用构造方法:,public FileOutputStream(String name)throws FileNotFoundException public FileOutputStream(String name,boolean append)throws FileNotFoundException public FileOutputStream(File file)throws FileNotFoundException public FileOutputStream(File file,boolean append)throws FileNotFoundException,例9-1:在系统当前目录下读取source.jpg文件内容并复制生成新文件dest.jpg。,/创建文件输入/输出字节流。fis=new FileInputStream(source.jpg);fos=new FileOutputStream(dest.jpg);,source.jpg,FileInputStream,关联:fis,dest.jpg,FileOutputStream,关联:fos,import java.io.*;public class FileStreamTest public static void main(String args)throws IOException FileInputStream fis=null;FileOutputStream fos=null;try fis=new FileInputStream(“Source.jpg”);fos=new FileOutputStream(“dest.jpg”);,声明并创建文件输入/输出字节流,byte b=new byte1024;int count;while(count=fis.read(b)0)fos.write(b,0,count);,读取文件source.jpg的内容,并复制生成文件dest.jpg。,【讨论事项】,使用FileInputStream读取源文件时,如果源文件没有指定路径则表示在当前系统默认目录下,并且源文件一定要存在。使用FileOutputStream将数据写入目标文件时,如果目标文件不存在则会自动创建,但目标文件指定的路径也不存在时,则不会创建文件而是抛出FileNotFoundException。,【讨论事项】,使用I/O流类时一定要处理异常。FileReader/FileWriter类与FileInputStream/FileOutputStream类中的方法功能相同,二者的区别在于读写文件内容时读写的单位不同,FileReader/FileWriter类以字符为单位而FileInputStream/FileOutputStream类以字节为单位。通常情形下,FileReader/FileWriter用于读写文本文件。,catch(IOException e)e.printStackTrace();finally fis.close();fos.close();,异常处理及文件输入/输出流的关闭,使用类FileReader/FileWriter读/写文件的示例,try fs=new FileWriter(source.txt);fs.write(很高兴学习java!);fs.close();fr=new FileReader(source.txt);fd=new FileWriter(dest.txt);int c;System.out.print(源文件内容:);while(c=fr.read()!=-1)System.out.print(char)c);fd.write(c);,fd.close();fr.close();System.out.print(n目标文件内容:);ft=new FileReader(dest.txt);char ch=new char100;int count;while(count=ft.read(ch)!=-1)System.out.print(new String(ch,0,count);ft.close();,catch(IOException e)e.printStackTrace();,【运行结果】源文件内容:很高兴学习java!目标文件内容:很高兴学习java!,【讨论事项】,由于中文字符存储时占2个字节,上面文本文件在使用FileInputStream类来读取时以字节为单位,如果read方法读取时只读到了中文字符编码的1个字节,则会输出乱码。FileReader类中的read方法以字符为单位读取,这样可以保证文本文件中的中文字符可以正确读取。,数据流,数据流包括数据输入流DataInputStream类和数据输出流DataOutputStream类,它们允许按Java的基本数据类型读写流中的数据。数据输入流以一种与机器无关的方式读取Java基本数据类型以及使用UTF-8修改版格式编码的字符串,DataInputStream,public class DataInputStream extends FilterInputStream implements DataInputDataInputStream类的构造方法为:public DataInputStream(InputStream in)。,DataInputStream类中读取数据的方法,public final boolean readBoolean()public final byte readByte()public final short readShort()public final char readChar()public final int readInt(),DataInputStream类中读取数据的方法,public final long readLong()public final float readFloat()public final double readDouble()public final String readUTF(),DataOutputStream,public class DataOutputStream extends FilterOutputStream implements DataOutputDataOutputStream类的构造方法为:public DataOutputStream(OutputStream out),DataOutputStream类中写入数据的方法,public final void writeBoolean(boolean v)public final void writeByte(int v)public final void writeShort(int v)public final void writeChar(int v)public final void writeInt(int v),DataOutputStream类中写入数据的方法,public final void writeLong(long v)public final void writeFloat(float v)public final void writeDouble(double v)public final void writeUTF(String str),使用类DataInputStream/DataOutputStream按数据类型读/写数据的示例。,try fos=new FileOutputStream(write.dat);dos=new DataOutputStream(fos);dos.writeUTF(Java程序设计);dos.writeDouble(30.6);dos.writeInt(337);dos.writeBoolean(true);dos.close();,fis=new FileInputStream(write.dat);dis=new DataInputStream(fis);System.out.println(书名:+dis.readUTF();System.out.println(单价:+dis.readDouble();System.out.println(页数:+dis.readInt();System.out.println(“是否适合初学者:+dis.readBoolean();dis.close();,catch(IOException e)e.printStackTrace();,【运行结果】书名:Java程序设计单价:30.6页数:337是否适合初学者:true,缓存流,外设读写数据的速度远低于内存数据的读写速度,为了减少外设的读写次数,通常利用缓存流从外设中一次读/写一定长度的数据,从而提高系统性能。BufferedInputStream/BufferedOutputStreamBufferedReader/BufferedWriter,BufferedInputStream,BufferedInputStream是实现缓存功能的InputStream,创建BufferedOutputStream时即创建了一个内部缓冲数组。public BufferedInputStream(InputStream in)public BufferedInputStream(InputStream in,int size),BufferedOutputStream,BufferedOutputStream是实现缓存功能的OutputStream,创建BufferedOutputStream时即创建了一个内部缓存数组。public BufferedOutputStream(OutputStream out)public BufferedOutputStream(OutputStream out,int size),BufferedReader/BufferedWriter,public BufferedReader(Reader in)public BufferedReader(Reader in,int sz)public BufferedWriter(Writer out)public BufferedWriter(Writer out,int sz),BufferedReader/BufferedWriter,BufferedReader类增加了方法public String readLine()用于读取一个文本行并返回该行内的字符串,如果已到达流末尾,则返回null。BufferedWriter类增加了方法public void newLine()用于写入一个行分隔符。,缓存流功能:,缓存流实现了对基本输入/输出流的封装并创建内部缓冲区数组。输入时基本输入流一次读取一定长度的数据到内部缓冲区数组,缓存流通过内部缓冲区数组来读取数据。输出时缓存流将数据写入缓冲区,基本输出流将缓冲区的数据一次写出。,使用BufferedReader/BufferedWriter读/写文件的示例,try FileReader f=new FileReader(BufferedReaderWriterTest.java);BufferedReader br=new BufferedReader(f);FileWriter fw=new FileWriter(dest.java);BufferedWriter bw=new BufferedWriter(fw);String s;int i=1;,while(s=br.readLine()!=null)bw.write(i+:+s);bw.newLine();bw.flush();br.close();bw.close();,InputStreamReader,在使用InputStream和OutputStream处理数据时,通过类InputStreamReader和OutputStreamWriter的封装就可以实现字符数据处理功能。InputStreamReader类是Reader类的子类,它是字节流通向字符流的桥梁,使用平台默认字符集或指定字符集读取字节并将其解码为字符。,OutputStreamWriter,OutputStreamWriter类是Writer类的子类,它是字符流通向字节流的桥染,使用平台默认字符集或指定字符集将字符编码为字节后输出。,InputStreamReader/OutputStreamWriter,public InputStreamReader(InputStream in)public InputStreamReader(InputStream in,String charsetName)public OutputStreamWriter(OutputStream out)public OutputStreamWriter(OutputStream out,String charsetName),PrintStream/PrintWriter,PrintStream封装了OutputStream,它可以使用print()和println()两个方法输出Java中所有基本类型和引用类型的数据。与其它的流有所不同,PrintStream不会抛出IOException,而是在发生IOException时将其内部错误状态设置为true,并通过方法checkError()进行检测。,PrintStream,public PritnStream(OutputStream out)public PrintStream(Strng fileName)public PrintStream(File file),PrintWriter,PrintWriter与PrintStream功能相同,都可以使用print()和println()两个方法完成各种类型数据输出。但是PrintWriter除了可以封装Writer外,还可以封装OutputStream。,PrintWriter,public PrintWriter(Writer out)public PrintWriter(OutputStream out)public PrintWriter(String fileName)public PrintWriter(File file),标准输入/输出流,在类中,定义了系统标准输入流in、标准输出流out、标准错误输出流err。系统标准流在Java程序运行时会自动提供标准输入流System.in将会读取键盘的输入标准输出流将数据在控制台窗口中输出标准错误流将错误信息在控制台窗口中输出。,标准输入/输出流,public static final InputStream inpublic static final PrintStream outpublic static final PrintStream err,使用系统标准输入/输出流的示例,InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(isr);String s=null;String ss=null;int a,b,c;System.out.println(请输入三个整数,数值之间用逗号分隔:);s=br.readLine();,while(!s.equals(exit)ss=s.split(,);if(ss.length!=3)System.err.println(数据少于三个);else a=Integer.parseInt(ss0);b=Integer.parseInt(ss1);c=Integer.parseInt(ss2);,if(a+bc,【运行结果】请输入三个整数,数值之间用逗号分隔:3,4,53,4,5 能组成三角形1,2数据少于三个1,2,31,2,3 不能组成三角形exit,重定向系统标准输入/输出流,如果不想让输出流和错误输出流中的信息都是通过控制台窗口输出,则可以将系统标准输入/输出流进行重定向。,重定向系统标准输入/输出流,public static void setIn(InputStream in)public static void setOut(PrintStream out)public static void setErr(PrintStream err),重定向系统标准输入/输出流的示例,FileInputStream fis=new FileInputStream(in.txt);InputStreamReader isr=new InputStreamReader(fis);BufferedReader br=new BufferedReader(isr);System.setIn(fis);FileOutputStream fos=new FileOutputStream(out.txt);BufferedOutputStream bos=new BufferedOutputStream(fos);PrintStream pso=new PrintStream(bos);System.setOut(pso);,FileOutputStream fes=new FileOutputStream(err.txt);BufferedOutputStream bes=new BufferedOutputStream(fes);PrintStream pse=new PrintStream(bes);System.setErr(pse);String s=null;String ss=null;int a,b,c;s=br.readLine();,while(!s.equals(exit)ss=s.split(,);if(ss.length!=3)System.err.println(数据少于三个);else a=Integer.parseInt(ss0);b=Integer.parseInt(ss1);c=Integer.parseInt(ss2);,if(a+bc,程序执行时读/写的三个文件内容如图所示,SCJP认证习题解析,在下列代码中,哪些选项可以插在注释行位置?import java.io.*;public class Example public static void main(String args)try File file=new File(temp.test);FileOutputStream stream=new FileOutputStream(file);/insert code catch(IOException ioe),SCJP认证习题解析,当编译并运行下列代码时其运行结果是什么?A.DataOutputStream filter=new DataOutputStream(stream);for(int i=0;i10;i+)filter.writeInt(i);B.for(int i=0;i10;i+)file.writeInt(i);,SCJP认证习题解析,当编译并运行下列代码时其运行结果是什么?C.for(int i=0;i10;i+)stream.writeInt(i);D.for(int i=0;i10;i+)stream.write(i);,【答案】:A、D,SCJP认证习题解析,当编译并运行下列代码时其运行结果是什么?import java.io.*;public class Example public static void main(String args)try PrintStream pr=new PrintStream(new FileOutputStream(outfile);System.out=pr;System.out.println(ok!);catch(IOException ioe),SCJP认证习题解析,当编译并运行下列代码时其运行结果是什么?A.输出字符串“ok!”B.编译错误 C.运行时异常,【答案】:B,File类,获得文件的属性信息或者删除和重命名文件以及对系统目录操作时,则要通过类来实现。File类是文件或目录的抽象表示,通过它可以实现对文件和目录信息的操作和管理。,File类中的常用构造方法,public File(String pathname)public File(String parent,String child)public File(File parent,String child),操作File对象,文件名的操作获取文件信息的操作 文件创建、删除的操作 目录操作,文件名的操作,public String getName()返回文件或目录的名称,该名称是路径名的名称序列中最后一个名称。public String getParent()如果File对象中没有指定父目录,则返回null;否则,将返回父目录的路径名字符串及子目录路径名称序列中最后一个名称以前的所有路径。,文件名的操作,public String getPath()返回此File对象所表示的路径名的字符串public String getAbsolutePath()返回此File对象所表示的绝对路径名字符串public boolean renameTo(File dest)当File对象所表示的文件或目录重命名成功则返回true;否则返回false,获取文件信息的操作,public boolean isAbsolute()如果此File对象表示的是绝对路径名则返回true;否则返回falsepublic boolean canRead()如果File对象所表示的文件可读返回true;否则返回falsepublic boolean canWrite()如果File对象所表示的文件可写返回true;否则返回false,获取文件信息的操作,public boolean exists()如果File对象所表示的文件或目录存在时返回true;否则返回false。public boolean isDirectory()如果File对象所表示的是一个目录返回true;否则返回falsepublic boolean isFile()如果File对象所表示的是一个文件返回true;否则返回false,获取文件信息的操作,public boolean isHidden()如果File对象所表示的是隐藏文件或目录则返回true;否则返回false。public long lastModified()返回File对象所表示的文件或目录最后修改时间,如果文件或目录不存在则返回0L。public long length()返回File对象所表示的文件或目录长度。,文件创建、删除的操作,public boolean createNewFile()如果File对象所表示文件不存在并成功创建则返回true;否则返回false。public boolean delete()删除File对象所表示文件或目录,目录必须为空才能删除。当删除成功时返回true;否则返回false。public void deleteOnExit()在Java虚拟机终止时,删除File对象所表示的文件或目录,目录操作,public String list()返回File对象所表示目录中的文件和目录名称所组成的字符串数组public boolean mkdir()当File对象所表示目录创建成功则返回true;否则返回false。,File类中方法使用示例,try String curuserdir=System.getProperty(user.dir);System.out.println(当前用户目录为:+curuserdir);File tempdir=new File(curuserdir);File f=new File(tempdir,temp.txt);System.out.println(文件是否存在:+f.exists();,当前用户目录为C:JavaExamplechapter099-7,文件是否存在:false,System.out.println(文件名为:+f.getName();System.out.println(“文件的绝路径为:+f.getAbsolutePath();f.createNewFile();System.out.println(文件是否存在:+f.exists();System.out.println(文件是否可读:+f.canRead();System.out.println(文件是否可写:+f.canWrite();,文件名为:temp.txt,文件的绝路径为:C:JavaExamplechapter099-7temp.txt,文件是否存在:true,文件是否可读:true,文件是否可写:true,System.out.println(文件的大小是:+f.length()+字节);System.out.println(文件是否为隐藏文件:+f.isHidden();System.out.println(文件建立的日期时间为:+new Date(f.lastModified();,文件的大小是:0字节,文件是否为隐藏文件:false,文件建立的日期时间为:Thu Jul 29 14:32:38 CST 2010,f.setReadOnly();System.out.println(设置只读属性后文件是否可写:+f.canWrite();System.out.println(当JVM终止时删除+f.getName()+文件);f.deleteOnExit();,设置只读属性后文件是否可写:false,SCJP认证习题解析,下列代码的运行结果是什么?import java.io.*;public class DOS public static void main(String args)File dir=new File(dir);dir.mkdir();File f1=new File(dir,f1.txt);try f1.createNewFile();catch(IOException e);File newDir=ne

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开