Java教材课件13输入输出流编程_第1页
Java教材课件13输入输出流编程_第2页
Java教材课件13输入输出流编程_第3页
Java教材课件13输入输出流编程_第4页
Java教材课件13输入输出流编程_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第13章 输入输出流编程教学目的要求1.理解 java 语言中输入/输出流的处理方法;2.掌握文件、字节流和字符流的处理方法,正确使用对象串行化的方法。 113.1 File类应用举例 文件操作是程序设计必不可少的部分。计算机把需要长期保存的数据以文件的形式存放在各种外部存储设备上。在需要输入数据时,从文件读出数据;而需要输出数据时,把数据写入文件。213.1.1 File类用来获取文件或目录的信息 Java把目录看成特殊的文件,作为文件名的列表处理,File类提供方法用以访问诸如路径、名称、大小、日期、读写属性等文件或目录的信息。也可以创建、删除文件、改变文件名、创建目录等。File类的直接

2、父类是Object。31. File类的构造方法File类中常用的构造方法如下: public File(String pathname) 其中的pathname是路径名字符串。该构造方法通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。若给定字符串pathname是空字符串,则结果是空的抽象路径名。 public File(File parent,String child) 其中的parent是父抽象路径名、child是子路径名字符串。该构造方法根据parent抽象路径名和child路径名字符串创建一个新File实例。4 public File(String parent,St

3、ring child) 其中参数parent是父路径名字符串、child是子路径名字符串。该构造方法根据parent路径名字符串和child路径名字符串创建一个新File实例。如果parent为null,则创建一个新的File实例,这与调用单参数File方法,以给定child路径名字符串作为参数的效果一样。否则,parent路径名字符串用于表示目录,而child路径名字符串用于表示目录或文件。如果 child路径名字符串是绝对路径名,则用与系统有关的方式将它转换成一个相对路径名。如果parent是空字符串,则新的File实例是通过将child转换成抽象路径名并根据与系统有关的默认目录来分析结果

4、而创建的。否则,将每个路径名字符串转换成一个抽象路径名,并根据父抽象路径名分析子抽象路径名。52.File类中的常用成员方法 File类中有许多成员方法,常用的成员方法及其功能概要描述见表13-1。限于篇幅的原因,读者在使用时可以参考Java API中对这些成员方法用法详细的说明。6public boolean canRead()测试应用程序能否读此对象指定的文件public boolean canWrite()测试应用程序能否写此对象指定的文件public boolean exists()测试此抽象路径名表示的文件或目录是否存public boolean isFile()测试此抽象路径名表示

5、的文件是否是一个标准文件public String getAbsolutePath()返回抽象路径名的绝对路径名字符串public String getPath()将此抽象路径名转换为一个路径名字符串public String getParent()获取此对象指定的文件的父目录public boolean mkdir()根据当前对象生成一个由该对象指定的路径public String list()列出当前目录下的文件public long length()返回由此抽象路径名表示的文件的长度public String getName()获取此对象指定的文件的文件名public boolean d

6、elete()删除此抽象路径名表示的文件或目录public long lastModified()获取此对象指定文件的最后修改时间(以长整型值表示) 表13-1 File类中的常用成员方法方法和描述73.类变量(静态数据成员) File类中的静态数据成员及其概要描述见表13-2。 表13-2 File类中的静态数据成员成员 描述 public static String pathSeparator 与系统有关的路径分隔符字符 public static char pathSeparatorChar与系统有关的默认路径分隔符字符 public static String separator与系统

7、有关的默认名称分隔符 public static char separatorChar与系统有关的默认名称分隔符8/测试给定平台上的文件系统的文件的路径分隔字符等import java.io.*;class Li13_01public static void main(String args)System.out.println();System.out.println();System.out.println();System.out.println(nn); 例13.1测试静态数据成员属性。9/用File类的构造方法构造文件对象并测试该类的成员方法import java.io.*;publ

8、ic class Li13_02 public static void main(String args) File(d:jdk15 ); System.out.println(可读?+(); System.out.println(可写?+(); System.out.println(文件存在?+(); System.out.println(是文件?+(); System.out.println(是目录?+(); System.out.println(文件长度=+(); System.out.println(文件最后修改日期:+(); System.out.println(文件名:+(); S

9、ystem.out.println(文件存放路径:+(); System.out.println(文件存放路径的父目录:+(); 例13.2构造File对象、测试文件的属性等有关信息应用举例。10 注意,本例程序在运行前,读者应确保d:jdk15文件夹中有,当然,文件夹的名字也可由读者命名,但是,要注意同时更改程序中的相应文件夹名称。 例13.3构造一个目录File对象,如果该指定的目录不存则创建该目录,同时统计并显示该目录下文件和子目录的个数以及该目录下文件的总长度。11import java.io.*;public class Li13_03 public static void main

10、(String args) throws Exception File(d:/jdk15006/lib); if(!() (); System.out.println(); System.out.println(); /变量tsize记录文件的总长度,变量fc,dc分别记录给定目录下的文件数和子目录数 int tsize=0,fc=0,dc=0; =new File(d:/jdk15006).listFiles(); for(int i=0;i) if(filesi.isFile() fc+; else dc+; tsize+=filesi.length(); System.out.print

11、ln(文件数:+fc+t目录数:+dc+t文件总长度:+tsize); 1213.1.2 文件的处理 文件输入/输出流类和提供了对文件顺序读/写的方法。文件输入流类用于读取文件中的字节数据,其直接父类为InputStream;文件输出流类用于向文件写入的字节数据,其直接父类为OutputStream。131.类的构造方法public (String name) 其中的name可以包含路径名和文件名,该构造方法通过打开一个到实际文件的连接来创建一个,该文件通过文件系统中的路径名name指定。public () 其中的类的对象,该构造方法通过打开一个到实际文件的连接来创建一个,该文件通过文件系统中

12、的 File对象file指定。public ( fd) 该构造方法通过使用文件描述符fdObj创建一个,该文件描述符表示到文件系统中某个实际文件的现有连接。142.类的构造方法public (String name) 该构造方法使用指定的字符串name创建一个向具有指定名称的文件中写入数据的输出文件流。public () 该构造方法使用指定的文件file创建一个向指定File对象表示的文件中写入数据的文件输出流。public (File append) 创建一个向指定File对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。153.

13、类的成员方法 类中的成员方法被调用时会产生IOException异常,常用成员方法见表13-3中的描述。表13-3 类中的常用成员方法方法 描述 public int read()从输入流中读取一个数据字节public int read(byteb)从输入流中读取的字节数据存放在字节数组b中public int read(byte b,int off,int len)从输入流中读取的len个字节数据存放在字节数组b中,offset开始存放 public long skip(long n)从输入流中跳过n个字节public void close()关闭输入流164.类的成员方法 类中的成员方法被

14、调用时会产生IOException异常,常用成员方法见表13-4中的描述。表13-4 类中的常用成员方法:方法 描述 public int write(int b)将指定字节写入此文件输出流public int write(byte b)将b.length个字节从指定字节数组写入此文件输出流中public int write(byte b,int off,int len)将指定字节数组中从偏移量off开始的len个字节写入此文件输出流 public void close()关闭输出流17例13.4读文件和写文件举例。假设在D:有文件Li13_04.java,编程实现把该文件原样复制后存放在C:

15、,文件名为Li13_04_。import java.io.*;class Li13_04 public static void main(String args) int length; byte buf=new byte1024; try in; out; in=new (d:Li13_04.java);/运行前要保证d:有Li13_04.java这个文件 out=new (c:Li13_04_); System.out.println(文件拷贝输出成功。); while(length=in.read(buf,0,1024)!=-1) out.write(buf,0,length); cat

16、ch(IOException e) System.out.println(Error: +e); System.exit(-1); 1813.2 Reader与Writer类应用举例 从JDK1.1开始,java.io包中加入了专门用于处理字符流输入/输出的类,它们的基类分别是抽象类Reader及抽象类Writer。1913.2.1 Reader和Writer Java提供了一系列用于处理字符流的接口和类,如Reader和Writer类,通过它们派生的子类对象来处理字符流。 Reader类和Writer类提供的方法分别见表13-5和表13-6中的描述,注意它们被调用时也会产生异常。20表13-

17、5 Reader类中的常用方法方法描述public int read()读取单个字符。返回作为整数读取的字符,范围在0到65535 之间public int read(char cbuf)将字符读入数组,cbuf是目标缓冲区public abstract int read(char cbuf,int off,int len)将字符读入数组的某一部分,从off开始存放len个public long skip(long n)跳过n个字符public abstract void close()关闭输入流21表13-6 Writer类中的常用方法public int write(int c)写入单个字

18、符,c是要写入字符的int值public int write(char cbuf)写入字符数组,cbuf是要写入的字符数组public int write(byte b,int off,int len)将指定字节数组中从偏移量off开始的len个字节写入此文件输出流public abstract void write(char cbuf,int off,int len)写入字符数组的某一部分,cbuf是字符数组public void write(String str,int off,int len)写入字符串的某一部分,str是要写入的字符串public void write(String s

19、tr)写入字符串public abstract void flush()刷新此流。如果此流已保存缓冲区中各种write()方法的任何字符,则立即将它们写入预期目标public abstract void close()(刷新流后)关闭流2213.2.2 InputStreamReader和OutputStreamWriter InputStreamReader从输入流中读取字节数据,并将其转换为特定的平台上的字符数据,其构造方法为:public InputStreamReader(InputStream in) 其中参数in是InputStream的对象,该构造方法可以创建一个使用默认字符集的

20、InputStreamReader。public InputStreamReader(InputStream in,String enc) 创建使用指定字符集的InputStreamReader。InputStreamReader的成员方法描述见表13-7,注意这些方法在被调用时也会产生异常。23表13-7 InputStreamReader类中的常用方法方法描述public int read()读取单个字符public int read(char cbuf,int off,int len)将字符读入数组的某一部分,从off开始存放len个public boolean ready()告知是否准

21、备读取此流。如果保证下一个 read() 不阻塞输入,则返回 True,否则返回 falsepublic void close()关闭输入流24 OutputStreamWriter将特定平台的字符数据转换为字节数据,写入到输出流,其构造方法为:public OutputStreamWriter(OutputStream out) 其中参数out是OutputStream对象,该构造方法用来创建使用默认字符编码的 OutputStreamWriter。public OutputStreamWriter(OutputStream out,String enc) 其中参数out是 OutputSt

22、ream对象,参数enc是字符串名称,该构造方法创建使用指定字符集的 OutputStreamWriter。 OutputStreamWriter的成员方法描述见表13-8,注意这些方法在被调用时也会产生异常。25表13-8 OutputStreamWriter类中的常用方法方法描述public void write(int c)写入单个字符,c是要写入字符的int值public void write(char cbuf,int off,int len)写入字符数组的某一部分,cbuf是字符数组public void write(String str,int off,int len)写入字符串

23、的某一部分,str是要写入的字符串public void flush()刷新该流的缓冲public void close()关闭流26例13.5读字符流文件:从给定的输入文件中读取字符流并在标准终端显示。import java.io.*;public class Li13_05 public static void main(String args)throws IOException int c; is; InputStreamReader ir; is=new (CharInput.java); ir=new InputStreamReader(is); System.out.printl

24、n(-程序开始-); while(c=ir.read()!=-1) System.out.print(char)c); System.out.println(-程序结束-); 27例13.6写字符流文件:从标准终端上输入字符并写入字符输出文件。import java.io.*;public class Li13_06 public static void main(String args)throws IOException int c; InputStreamReader ir=new InputStreamReader(System.in); os=new (c:/hhh.txt); Ou

25、tputStreamWriter or=new OutputStreamWriter(os); System.out.print(请输入字符(输入x结束,运行结束后请查看C:/hhh.txt):); while(c=ir.read()!=x) or.write(char)c); or.close(); os.close(); 28例13.7读一行字符:从文件中按行读出文件中的各个字符并在标准终端上输出,文件名由命令行参数给出。import java.io.*;public class Li13_07 public static void main(String args) throws IOE

26、xception InputStream is=new (args0); InputStreamReader in=new InputStreamReader(is); BufferedReader br=new BufferedReader(in); String str; int c=0; while(str=br.readLine()!=null) /每次从文件中读一行字符 System.out.println(str); 2913.3 InputStream与OutputStream类应用举例 java.io包中包含的两个基本的字节流类InputStream与OutputStream是

27、所有字节流的基类。它们提供的方法通常在子类中被覆盖,以适合于特定的字节流的需要,提供最基本的输入/输出功能。3013.3.1 InputStream类 Inputstream抽象类中定义了所有输入字节流都需要的方法,完成最基本的从输入流读入数据的功能:public int read()public int read(byte b)public int read(byte b,int off,int len)public int available()public long skip(long n)public void mark()public void reset()public boole

28、an mark supporeed()public void close()31 具体使用时,从InputStream派生的子类中创建对象,完成不同情况下的输入操作。InputStream的常用子类如下:ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用;StringBufferInputStream:把一个String对象作为InputStream;:把一个文件作为InputStream,实现对文件的读取操作;PipedInputStream:实现了pipe的概念,主要在线程中使用;SequenceInputStream:把多个InputStream

29、合并为一个InputStream。3213.3.2 OutputStream类 OutputStream抽象类中定义了所有字节输出流都需要的方法,完成向输出流写入数据的功能。public void write(int b)public void write(byte b)public void write(byte b,int off,int len)public void flush()public void close()33 具体使用时,从OutputStream派生的子类中创建对象,完成不同情况下的输出操作。OutputStream的常用子类如下:ByteArrayOutputStre

30、am:把信息存入内存中的一个缓冲区中;:把信息存入文件中;PipedOutputStream:实现了pipe的概念,主要在线程中使用;SequenceOutputStream:把多个OutputStream合并为一个OutputStream。34例13.8最基本的输入输出方法应用举例:键盘读入单个字节字符,多个字节字符并在屏幕输出显示。import java.io.*;public class Li13_08 public static void main(String args) try InputStream is=System.in; OutputStream os=System.out

31、; int i=is.read(); /读入一个字节字符 os.write(char)i); /输出该字节字符 os.write(n); byte b=new byte8; int c=is.read(b); /读入的字节字符存入字节数组b中 for(i=0;ib.length;i+)35 os.write(bi); /输出数组b中的字节字符 os.write(n); c=is.read(b,3,5); /读入最多5个字节字符,存入数组b偏移3处 for(i=0;i b.length;i+) os.write(bi); /输出数组b中的字节字符 os.write(n); is.close();

32、 os.close(); catch(IOException e) e.printStackTrace(); 36例13.9管道流类PipedInputStream和PipedOutputStream应用举例。import java.io.*;/管道流的使用public class Li13_09 public static void main(String args)throws Exception PipedInputStream pis; PipedOutputStream pos; byte b; pis=new PipedInputStream(); pos=new PipedOut

33、putStream(pis); /流pos的输出作为流pis的输入 pos.write(a); /流pos的输出 pos.write(b); /流pos的输出 b=(byte)pis.read(); /流pis的输入 System.out.println(b); b=(byte)pis.read(); /流pis的输入 System.out.println(b); 3713.4 数据流应用举例 DataInputStream 和DataOutputStream分别是过滤流FilterInputStream 和FilterOutputStream的子类,它们不仅能读/写字节流,而且能读/写Jav

34、a语言的基本数据类型,这些基本数据类型在流中的表示与在内存中一样,不需转换。 DataInputStream实现了接口DataInput中定义的与平台无关的带格式的读操作,从而实现了不同数据类型的读操作,其构造方法为: DataInputStream(InputStream in) 38public int read(byte b)public int read(byte b, int off, int len)public boolean readBoolean() public byte readByte() public char readChar() public double rea

35、dDouble() public float readFloat() public void readFully(byte b) public void readFully(byte b, int off, int len) public int readInt() public String readLine() public long readLong() public short readShort() public int readUnsignedByte() public int readUnsignedShort() public String readUTF() public s

36、tatic String readUTF(DataInput in) public int skipBytes(int n) DataInputStream类的成员方法如下:39 DataOutputStream实现了接口DataOutput中定义了与平台无关的带格式的写操作,从而实现了对不同数据类型的写操作,其构造方法为: DataOutputStream(OutputStream out) 40public void flush() public int size() public void write(byte b, int off, int len) public void write

37、(int b) public void writeBoolean(boolean v) public void writeByte(int v) public void writeBytes(String s) public void writeChar(int v) public void writeChars(String s) public void writeDouble(double v) public void writeFloat(float v) public void writeInt(int v) public void writeLong(long v) public v

38、oid writeShort(int v) public void writeUTF(String str) DataOutputStream类的成员方法如下:41例13.10数据流的使用:可以从数据输入流中按各种数据类型读数据,也可以往数据输出流中按各种数据类型写数据。import java.io.*; /数据流的使用public class Li13_10 public static void main(String arg)throws Exception String f = c:/stu.dat; Student s=new Student(1000,95,true); fos =

39、new (f); DataOutputStream out = new DataOutputStream(fos);/ 构造数据输入流对象 out.writeInt(s.id); /往数据输出流中写int型数据。 out.writeDouble(s.score); /往数据输出流中double型写数据。 out.writeBoolean(s.pass); /往数据输出流写boolean型数据。 out.close(); 42 fis = new (f); DataInputStream in = new DataInputStream(fis); int i = in.readInt(); /从数据输入流中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论