JAVA语言与编程第10章 输入和输出ppt课件_第1页
JAVA语言与编程第10章 输入和输出ppt课件_第2页
JAVA语言与编程第10章 输入和输出ppt课件_第3页
JAVA语言与编程第10章 输入和输出ppt课件_第4页
JAVA语言与编程第10章 输入和输出ppt课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、第十章第十章 输入和输出输入和输出10.1 流的基本概念流的基本概念 输入输出是用户和程序员交互的重要手段输入输出是用户和程序员交互的重要手段,也是程序设计语言的一种基本操作也是程序设计语言的一种基本操作.Java中的中的输入输出是通过流来实现的输入输出是通过流来实现的,流包括输入流和流包括输入流和输出流输出流.输入流输入流(input stream)是数据从外部是数据从外部设设备到计算机备到计算机,而输出流而输出流(output stream)是数据是数据从计算机到外部设备从计算机到外部设备.10.2 字节流与字符流字节流与字符流 Java中的流根据处理的数据的不同分为字节流和中的流根据处理

2、的数据的不同分为字节流和字符流字符流.字节流按照字节字节流按照字节(8位位)传输传输,字符流按照字符字符流按照字符(16位位)传输传输.10.2.1 字节流字节流 处理字节流的类有处理字节流的类有InputStream和和OutputStream以及它们的子类以及它们的子类, InputStream提供提供read()方法方法, OutputStream提供提供write()方法方法.字节流类的继承关字节流类的继承关系如下图系如下图:n 字节流的类层次结构 ObjectInputStream StringBufferInputStream SequenceInputStream ByteArr

3、ayInputStream FilterInputStream PipedInputStream FileInputStream PushbackInputStream BufferedInputStream DataInputStream LineNumberInputStream InputStream ObjectOutputStream ByteArrayOutputStream FilterOutputStream PipedOutputStream FileOutputStream PrintStream BufferedOutputStream DataOutputStream

4、OutputStream 10.2 字节流与字符流字节流与字符流(续续)10.2.2 字符流字符流 Reader和和Writer是字符流的抽象超类是字符流的抽象超类. Reader提供抽象方法提供抽象方法read(char cbuf), Writer提供抽象方法提供抽象方法write(char cbuf).字符字符流类的继承关系下图流类的继承关系下图:例:例:FileInputStreamDemo.java FileWriterDemo.javan 读取器和写出器的类层次结构 StringReader PipedReader FilterReader InputStreamReader Cha

5、rArrayReader BufferReader PushbackReader FileReader LineNumberReader Reader PipedWriter FilterWriter OutputStreamWriter CharArrayWriter BufferedWriter FileWriter Writer StringWriter PrintWriter 10.3 节点流与处理流节点流与处理流 Java中的流根据功能不同分为节点流和处理流中的流根据功能不同分为节点流和处理流.10.3.1 节点流节点流 节点流是从特定地方读写的流类节点流是从特定地方读写的流类,它和

6、具体的存放它和具体的存放地地(文件文件,内存内存,管道管道)相关联相关联.节点流又包括字节型的节节点流又包括字节型的节点流和字符型的节点流点流和字符型的节点流.1.面向字节的节点流面向字节的节点流文件文件 FileInputStream, FileOutputStream内存内存(数组数组) ByteArrayInputStream, ByteArrayOutputStream管道管道 PipedInputStream, PipedOutputStream10.3 节点流与处理流节点流与处理流(续续)2.面向字符的节点流面向字符的节点流文件文件 FileReader, FileWriter内存

7、内存(数组数组) CharArrayReader, CharArrayWriter内存内存(字符串字符串) StringReader, StringWriter管道管道 PipedReader, PipedWriter例例:TestNodeStream.java使用字符型节点流使用字符型节点流FileReader的一个例子的一个例子10.3 节点流与处理流节点流与处理流(续续)10.3.2 处理流处理流 处理流是连接在已存在的流之上,通过对数据的处理流是连接在已存在的流之上,通过对数据的处理为程序提供更强大的读写功能。处理流也有面处理为程序提供更强大的读写功能。处理流也有面向字符和面向字节之分

8、:向字符和面向字节之分:1.面向字节的处理流面向字节的处理流常用的有常用的有: BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputStream10.3 节点流与处理流节点流与处理流(续续)2.面向字符的处理流面向字符的处理流常用的有常用的有: BufferedWriter BufferedReader InputStreamReader OutputStreamWriter 10.3 节点流与处理流节点流与处理流(续续) System.in中提供的中提供的read()方法一次只能读取一个字节或方法一次只能

9、读取一个字节或按照按照byte类型的数组来读取类型的数组来读取,若想一次读入一行若想一次读入一行,则可以将其则可以将其作为参数传递给其他输入流作为参数传递给其他输入流,这些流称为处理流或过滤流这些流称为处理流或过滤流. 类类BufferedReader提供了提供了readLine()方法可以一次从流方法可以一次从流中读一行中读一行,其构造方法的参数为其构造方法的参数为Reader.而类而类InputStream Reader是是Reader的子类的子类,其构造方法的参数为其构造方法的参数为InputStream.因而可以将因而可以将System.in先传给处理流先传给处理流InputStrea

10、mReader,再再传给处理流传给处理流BufferedReader.例例:ConvertStream.java,从键盘一次读取一行文本从键盘一次读取一行文本,每读一行每读一行就将该行回显在屏幕上就将该行回显在屏幕上,最后用最后用Ctrl+Z结束程序的执行结束程序的执行10.4 标准输入流与标准输出流标准输入流与标准输出流 “标准输入与标准输出的意思是标准输入与标准输出的意思是:一个程序只使用一个程序只使用一个信息流一个信息流.即所有输入都是从标准输入进来的即所有输入都是从标准输入进来的,所所有输出都从标准输出出去有输出都从标准输出出去,所有错误信息都送到标所有错误信息都送到标准错误里准错误里

11、. 对于一般的系统对于一般的系统,标准输入通常是键盘标准输入通常是键盘,标准输出标准输出通常是显示器屏幕通常是显示器屏幕. Java预先定义了预先定义了3个标准流对象个标准流对象,分别与系统的标准输入分别与系统的标准输入,标准输出和标准错误相连接标准输出和标准错误相连接,它们被定义为它们被定义为System类的三个静态常量属性类的三个静态常量属性,分别分别为为System.in, System.out, System.err.10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)10.4.1 标准输入流标准输入流 Java的标准输入的标准输入System.in是是InputStream

12、类的类的对象对象,当程当程序需要从键盘读取一个字节的数据时序需要从键盘读取一个字节的数据时,只需调用只需调用System.in的的read()方法方法,例例: char ch=(char)System.in.read(); 在使用在使用System.in.read()方法读入数据时方法读入数据时,需注意需注意以下几点以下几点:(1)read()方法可能会抛出异常方法可能会抛出异常,因此要么指定向上抛因此要么指定向上抛出异常出异常,要么用要么用try语句显式处理异常语句显式处理异常,例例:try char ch=(char)System.in.read();catch (IOException

13、e) /对异常处理对异常处理10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)(2)当键盘缓冲区中没有未被读取的数据时当键盘缓冲区中没有未被读取的数据时,执行执行System.in.read()将导致线程转入阻塞状态将导致线程转入阻塞状态,在阻在阻塞状态下塞状态下,当前流程将停留在上述语句位置且整个当前流程将停留在上述语句位置且整个程序被挂起程序被挂起,等待用户输入一个数据后等待用户输入一个数据后,才能继续才能继续;所以程序中有时利用所以程序中有时利用System.in.read()语句来达语句来达到暂时保留屏幕的目的到暂时保留屏幕的目的,例例:System.out.println

14、(Press any key to continue:);trychar test=(char)System.in.read(); catch(IOException e) 10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)(3)执行执行System.in.read()方法将从键盘缓冲区读入方法将从键盘缓冲区读入一个字节的数据一个字节的数据,而返回的却是而返回的却是32位的整数位的整数,需要需要注意的是只有这个整数的低位字节是真正输入的注意的是只有这个整数的低位字节是真正输入的数据数据,其高位字节全是零其高位字节全是零.例例:Echo.java从键盘读取一个整数并回显在屏幕上从键盘

15、读取一个整数并回显在屏幕上.10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)nimport java.io.*;npublic class Echon public static void main(String args)n tryn BufferedReader in = new BufferedReader(n new InputStreamReader(System.in);n System.out.print(Please enter an integer:);n String s= in.readLine();n int i= Integer.parseInt(s);

16、n System.out.println(You have entered an integer:+i);n n catch(NumberFormatException e)n System.out.println(Number format error!);n n catch(IOException e)n System.out.println(e.toString();n n n10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)10.4.2 标准输出流标准输出流 System.out是是PrintStream类的对类的对象象,PrintStream类是过类是过滤输出类滤输出类F

17、ilterOutputStream的子类的子类,其中定义了向其中定义了向屏幕输屏幕输送不同类型数据的方法送不同类型数据的方法print()和和println(). println()共有十种重载的形式共有十种重载的形式,可以输出不同类型可以输出不同类型的变量或的变量或对象对象,包括包括boolean,byte,char,double,float,int,long和和short类型以及类型以及String, Object 类的对象类的对象,其基本形式为其基本形式为: public void println( ); 另外还有一个参数为空的另外还有一个参数为空的println()方法方法,表示换行表

18、示换行 print()方法有九种重载的形式方法有九种重载的形式,与与println()基本相基本相同同,只是只是没有参数为空的没有参数为空的print()方法方法.10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)例例:从键盘读取的单个字母转换成大写后从键盘读取的单个字母转换成大写后,在标准输在标准输出设备上输出出设备上输出.import java.io.*;class LowerToUpper public static void main(String args ) char ch; try boolean b;10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)nd

19、on b=false;n System.out.print(Please enter a lowercase:);n ch=(char)System.in.read();n if (!Character.isLowerCase(ch)n b=true;System.in.skip(2) ;n n else System.out.println(ch+ to uppercase is: +n Character.toUpperCase(ch);n while (b);n n catch(IOException e)n System.out.println( Input error !);n n

20、n10.4 标准输入流与标准输出流标准输入流与标准输出流(续续)10.4.3 输入输出重定向输入输出重定向 Java的的System类还提供了类还提供了3个重定向标准输入个重定向标准输入,标准输出标准输出和标准错误的静态方法和标准错误的静态方法:public static void setErr(PrintStream err)public static void setIn(InputStream in)public static void setOut(PrintStream out) 有时我们不希望从键盘读取数据或将数据输出到有时我们不希望从键盘读取数据或将数据输出到屏幕上屏幕上,而是希

21、望从某个文件中读取数据或者是将某些数据而是希望从某个文件中读取数据或者是将某些数据写到某个写到某个文件当中文件当中,这个时候就可以用输入输出重定向这个时候就可以用输入输出重定向.例例:Redirecting.java 对输入输出进行重定向对输入输出进行重定向10.5 文件文件 在对输入在对输入/输出的处理中输出的处理中,最常见的是对文件的操作最常见的是对文件的操作. 通过一个对文件的打开操作通过一个对文件的打开操作,流就与特定的文件建立了流就与特定的文件建立了联络联络,程序便可以通过流与文件交换信息了程序便可以通过流与文件交换信息了.10.5.1 文件与目录管理文件与目录管理 Java语言不但

22、支持文件管理语言不但支持文件管理,而且还支持目录管理而且还支持目录管理.在在Java语言中语言中,它们都是由专门的类它们都是由专门的类java.io.File来实来实现现. 每个每个File类的对象表示一个磁盘文件或目录类的对象表示一个磁盘文件或目录,其对象其对象属性中包含了文件或目录的相关信息属性中包含了文件或目录的相关信息,如名称如名称,长度长度,所所含文件个数等含文件个数等,调用它的方法可以完成对文件或目录的调用它的方法可以完成对文件或目录的常用管理操作常用管理操作,以下为以下为File类的常用方法类的常用方法:10.5 文件文件(续续)1.构造函数构造函数 File类共提供了三个不同的

23、构造函数类共提供了三个不同的构造函数:(1)File(String ) 参数参数pathname指定新创建的指定新创建的File对象指向的磁对象指向的磁盘文件或目录的路径盘文件或目录的路径. 例例:File f1 = new File (D: java2); String s = java2myfirst; File f2 = new File(s);10.5 文件文件(续续)(2)File(String ,String ) parent表示所对应的文件或目录的绝对或相对路表示所对应的文件或目录的绝对或相对路径径,child表示文件或目录名表示文件或目录名.例例:File f3=new Fil

24、e(java2myfirst“,first.java);10.5 文件文件(续续)(3)File(File ,String ) parent表示一个已经存在的代表某磁盘目录的表示一个已经存在的代表某磁盘目录的File对象对象,表示文件或目录的路径表示文件或目录的路径,child表示文件或表示文件或目录名目录名.例例:String sdir =java2myfirst;String sfile = first.java;File Fdir = new File(sdir);File Ffile = new File(Fdir, sfile);10.5 文件文件(续续)(4)File(URI ur

25、i) uri表示一个表示一个URI(Uniform Resourse Identifier)地址地址,将该地址转换成绝对路将该地址转换成绝对路径所得的文件创建一个径所得的文件创建一个File对象对象.10.5 文件文件(续续)2.获取文件或目录属性的方法获取文件或目录属性的方法(1)判断文件或目录是否存在判断文件或目录是否存在public boolean exists()(2)判断是文件还是目录判断是文件还是目录public boolean isFile()public boolean isDirectory()(3)获取文件或目录名称与路径获取文件或目录名称与路径public String

26、getName()public String getPath()10.5 文件文件(续续)(4)获取文件长度获取文件长度public long length()(5)获取文件读写属性获取文件读写属性public boolean canRead()public boolean canWrite()(6)列出目录中的文件列出目录中的文件public String list()(7)比较两个文件或目录比较两个文件或目录public boolean equals(File f)10.5 文件文件(续续)3.文件或目录操作的方法文件或目录操作的方法(1)重命名文件重命名文件public boolean

27、renameTo(File newFile)(2)删除文件删除文件public void delete()(3)创建目录创建目录public boolean mkdir()public boolean mkdirs()例例:FileOperation.java 使用使用File类中的常用方法类中的常用方法10.5 文件文件(续续)10.5.2 文件输入输出流文件输入输出流 文件输入输出流用于读写文件文件输入输出流用于读写文件,常用的流类为常用的流类为:java.io.FileInputStreamjava.io.FileOutputStream 10.5 文件文件(续续) 通常通常,利用文件输

28、入输出流读写磁盘文件应遵循利用文件输入输出流读写磁盘文件应遵循如下的步骤如下的步骤:1.利用文件名字符串或利用文件名字符串或File对象创建输入输出流对对象创建输入输出流对象象.以以FileInputStream为例为例,它有两个常用的构造函它有两个常用的构造函数数:FileInputStream(String FileName)throws FileNotFoundExceptionFileInputStream(File f) throws FileNotFoundException10.5 文件文件(续续)2.从文件输入输出流中读写数据从文件输入输出流中读写数据 从文件输入输出流中读写数

29、据有两种方式从文件输入输出流中读写数据有两种方式:一是直一是直接利用接利用FileInputStream和和FileOutputStream自身自身的读写功能的读写功能;另一种是以另一种是以FileInputStream和和FileOutputStream为原始数据源为原始数据源,再套接上其他功再套接上其他功能强大的输入输出流完成文件的读写功能能强大的输入输出流完成文件的读写功能.为了能更为了能更方便地从文件中读写不同类型的数据方便地从文件中读写不同类型的数据,一般都采用第一般都采用第二种方法二种方法,常借助过滤流的子类常借助过滤流的子类DataInputStream和和DataOutputS

30、tream来实现对不同类型数据的读写来实现对不同类型数据的读写.10.5 文件文件(续续)3.关闭文件输入输出流与文件的连接关闭文件输入输出流与文件的连接例例:CopyFile.java 复制文件复制文件import java.io.*;public class CopyFile public static void main(String args )throws IOException int i; FileInputStream fin; FileOutputStream fout; try fin=new FileInputStream(args0); catch (FileNotFo

31、undException e) System.out.println(Input File Not Found); return; 10.5 文件文件(续续)ntryn fout=new FileOutputStream(args1);n n catch(FileNotFoundException e)n System.out.println(Error Opening Output File); return;n n while (i=fin.read()!=1) fout.write(i);n fin.close();n fout.close();n n10.5 文件文件(续续)注注:当用

32、当用FileOutputStream的不带参数的构造函数的不带参数的构造函数创建文件输出流时创建文件输出流时,如果文件已存在如果文件已存在,那么该创建那么该创建将文件的长度截为将文件的长度截为0.若不希望破坏文件原有内容若不希望破坏文件原有内容,则可以使用下面的构造函数则可以使用下面的构造函数:public FileOutputStream(File file,boolean append)throws FileNotFoundExceptionpublic FileOutputStream(String name, boolean append)throws FileNotFoundExce

33、ption10.5 文件文件(续续)10.5.3 随机访问文件流随机访问文件流 对于类对于类FileInputStream和和FileOutputStream来来说说,它们的对象都是顺序访问流它们的对象都是顺序访问流,即只能对文件进行即只能对文件进行顺序访问顺序访问.若想对文件进行随机读写若想对文件进行随机读写,则需使用则需使用RandomAccessFile类类,它直接继承自它直接继承自Object类类,且且实现了实现了DataInput和和DataOutput接口接口,以下是该类的以下是该类的主要方法主要方法:10.5 文件文件(续续)1.构造函数构造函数RandomAccessFile(

34、File file,String mode)throws FileNotFoundExceptionRandomAccessFile(String name,String mode)throws FileNotFoundException 10.5 文件文件(续续) 参数参数mode指定指定RandomAccessFile对象可以以对象可以以何种方式打开和访问文件何种方式打开和访问文件. mode有有4种取值种取值:r 表示以只读方式打开文件表示以只读方式打开文件rw 表示以读写方式打开文件表示以读写方式打开文件rwd 表示以读写方式打开文件表示以读写方式打开文件,对文件数据的任何改变都被对文

35、件数据的任何改变都被立即写入物理设备立即写入物理设备rws 表示以读写方式打开文件表示以读写方式打开文件,对文件数据或元数据对文件数据或元数据(添加到添加到程序元素上的额外信息程序元素上的额外信息)的任何改变都被立即写入物理设的任何改变都被立即写入物理设备备例例:File fileName=new File(“BankFile.txt”); RandomAccessFile myRAF=new RandomAccessFile(fileName,”rw”)10.5 文件文件(续续) 2.操作文件指针的方法操作文件指针的方法 RandomAccessFile对象的文件指针遵循下面的规律对象的文件指针遵循

温馨提示

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

评论

0/150

提交评论