《第10章输入输出new.ppt》由会员分享,可在线阅读,更多相关《第10章输入输出new.ppt(52页珍藏版)》请在三一文库上搜索。
1、第十章,Java 输入输出,1输入输出流的概念、文件数据流、缓冲区数据流、数据数据流、管道数据流和对象流。通过本讲的学习,同学们可以在java程序中实现随意地输入输出。 2掌握I/O流层次结构中类间的层次关系以及利用这些类进行输入输出处理。,难重点,10.1 输入输出类库 10.2 标准输入输出及标准错误 10.3 文件操作,10.1 输入输出类库,Java的输入输出功能必须借助于输入输出类库java.io包来实现,这个包中的类大部分是用来完成流式输入输出的类。,1. 流,流是指在计算机的输入与输出之间的数据的序列,Java中的数据流根据处理数据的不同分为位流(字节流)和字符流。字节流按照字节
2、(8位)传输,字符流按照字符(16位)传输 ; 就流的运动方向而言,流可分为输入流(input stream)和输出流(output stream),输入流代表从外设流入计算机的数据序列;输出流代表从计算机流向外设的数据序列。,流、程序、外设之间的关系,数据,键盘,程序,输入流,输出流,数据,打印机,显示器,节点流:对应具体数据存放的地方或从特定的地方读写的流类称为节点流,如文件、磁盘或一块内存区域、管道等。 处理流(过滤流):使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。,常用的字节型的节点流有: 文件:FileInputStream, FileOutputS
3、tream 内存(数组):ByteArrayInputStream, ByteArrayOutputStream 管道:PipedInputStream, PipedOutputStream 常用的字符型的节点流有: 文件:FileReader, FileWriter 内存(数组):CharArrayReader, CharArrayWriter 内存(字符串):StringReader, StringWriter 管道:PipedReader, PipedWriter,FileInputStream和FileOutputStream,节点流,用于从文件中读取或往文件中写入字节流。如果在构造F
4、ileOutputStream时,文件已经存在,则覆盖这个文件。 BufferedInputStream和BufferedOutputStream,过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。 DataInputStream和DataOutputStream,过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。 PipedInputStream和PipedOutputStream,管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须
5、同时构造管道输入流和管道输出流。,2 输入输出流类,在Java的流类中,最基本的类有两个: 输入流类InputStream和输出流类OutputStream。这两个是具有最基本的输入输出功能的抽象类,其他流类都是为了方便处理各种特定流而设置的,属于InputStream或OutputStream的子类。,InputStream类,int read( ) long skip( ) void mark( ) void close( ) void reset( ),InputStream FileInputStream FilterInputStream DataInputStream Buffer
6、edInputStream,InputStream类的主要方法,InputStream子类的继承关系,OutputStream类,void write( ) void flush( ) void close( ),OutputStream FileOutputStream FilterOutputStream BufferedOutputStream PrintStream DataOutputStream,OutputStream类的主要方法,OutputStream子类的继承关系,Reader类,int read( ) long skip( ) void mark( ) void clos
7、e( ) void reset( ),Reader BufferedReader InputStreamReader FileReader,Reader类的主要方法,Reader子类的继承关系,Writer类,void write( ) void flash( ) void close( ),Writer PrintWriter BufferedWriter OutputStreamWriter FileWriter,Writer类的主要方法,Writer子类的继承关系,10.2 标准输入输出及标准错误,Java系统预先定义好3个流对象分别表示标准输出设备、标准输入设备和标准错误设备,它们分别
8、是System.out,System.in和System.err。 System.out是System的一个静态属性,属于PrintStream类对象,用于输出字节数据流,对应标准输出设备:屏幕。 System.in 也是System的一个静态属性,属于InputStream类对象,用于输入字节数据流,对应标准输入设备:键盘。 System.err 也是System的一个静态属性,属于PrintStream类对象,用于系统错误信息的输出,对应屏幕。,1 标准输入,Java的标准输入设备键盘用System.in表示,System.in属于InputStream类对象。当需要从键盘输入数据时,可以
9、直接使用该类的read()方法或子类定义的其他方法 。,Java实例从键盘输入字符,import java.io.*; public class StandardIn1 public static void main(String args) throws IOException char c; System.out.println(“ 输入一个字符“); c=(char)System.in.read(); System.out.print( “输入的字符是:“+c); ,例 -利用read()语句暂缓程序运行,import java.io.IOException; public class
10、StandardIn2 public static void main(String args) throws IOException for (int i=1; i=5; i+) System.out.println(i); System.out.println(“按回车键继续. “); System.in.read(); System.out.print( “程序继续运行!“); ,例 -输入字符串,import java.io.*; public class StandardIn3 public static void main(String args) throws IOExcepti
11、on InputStreamReader iin=new InputStreamReader(System.in); BufferedReader bin =new BufferedReader(iin); String s; float f; int i; boolean b; System.out.println(“输入任一字符串“); s=bin.readLine();,System.out.println(“输入浮点数“); f=Float.parseFloat(bin.readLine(); System.out.println(“输入整数“); i=Integer.parseInt
12、(bin.readLine(); System.out.println(“输入布尔量“); b=new Boolean(bin.readLine().booleanValue(); System.out.println(“输入的字符串:“+s); System.out.println(“输入的浮点数:“+f); System.out.println(“输入的整数:“+i); System.out.println(“输入的布尔量:“+b); ,2 标准输出,Java的标准输入设备:显示器用System.out表示,System.out属于PrintStream类对象。 利用PrintStream
13、类的print()或println()方法可以非常方便地输出各类数据,这两个方法的唯一区别是print()输出后不换行,而println()方法输出完毕后要换行 。,3 标准错误,运行或编译Java程序时,各种错误信息输出到标准错误设备,即显示器。在Java中,标准错误设备用System.err表示。System.err属于PrintStream类对象。,4 系统属性,class prop public static void main (String args ) String prefix = System.getProperty(“user.dir“) + System.getPrope
14、rty(“file.separator“); System.out.println(prefix); ,import java.util.*; public class props public static void main (String args ) Properties p=System.getProperties( ); Enumeration s=p.propertyNames ( ); / 属性名称枚举 while(s.hasMoreElements ( ) String pname=(String) s.nextElement( ); / 取出各个属性名称 String pv
15、=System.getProperty(pname); / 获取属性值 System.out.println(pname+“ “+pv); ,4 系统属性,其部分输出如下: java.runtime.name Java(TM) 2 Runtime Environment, Standard Edition sun.boot.library.path C:JDK1.3JREbin java.vm.version 1.3.0-C os.name Windows 98 user.home C:WINDOWS file.encoding GBK java.specification.version 1
16、.3 user.name Xu Yingxiao java.class.path . user.region CN,4 系统属性,10.3 文件操作,在程序中要对磁盘文件或目录进行操作,首先要对文件或目录建立连接,为此Java提供了File类。File类也位于java.io包中,但不是流类,而是专门用来管理磁盘文件和目录。 一个File类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,其方法可以完成对文件或目录的常用管理操作,如创建、删除等。,1 建立File对象,File类提供了3个不同的构造方法 : File(String path) St
17、ring类参数path指定所建对象对应的磁盘文件名或目录名及其路径名。 File(String path, String name) 此构造方法中的参数path表示文件或目录的路径,参数name表示文件或目录名。 File(File dir, String name) 此构造方法中的参数dir表示一个磁盘目录对应的File对象,参数name表示文件名或目录名。,File类可以代表文件或目录,如: File x=new File(“c:windows“); File y= new File(“c:“); 另外,考虑到不同操作系统中表示目录的方法不一样,程序中常通过读取系统属性创建File对象,如
18、: String prefix = System.getProperty(“user.dir“) + System.getProperty(“file.separator“); File x=new File(prefix+“xx.txt“);,2 File对象的属性和操作,public String getName():得到文件名 public String getPath():得到文件路径 public boolean exists():判断文件或目录是否存在 public long length():返回文件的字节数 public boolean canRead():返回当前文件是否可读
19、 public boolean canWrite():返回当前文件是否可写 public boolean equals(File file):比较文件或目录 public boolean isFile():检测是否是文件 public boolean isDirectiry():检测是否是目录 public boolean renameTo(File file):重命名文件 public void delete():删除文件,补充例1 import java.io.*; class FileTest static int i=0; public static void main(String
20、args ) File x= new File(“c:“); File y= new File(“c:xu“); y.mkdir( ) ; System.out.println(x.lastModified( ); ,File类,补充例 2 import java.io.*; class FileTest static int i=0; public static void main(String args ) File x= new File(“c:windows“); String y =x.list( ); for(int i=0;iy.length; i+) System.out.pr
21、intln(yi); ,File类,补充例3 import java.io.*; class FileTest static int i=0; public static void main(String args ) show(args0); public static void show(String s) i+=3; / 用于显示排版 String blank=new String(new chari); File x=new File(s); System.out.println(new String(new chari-3)+s); String content=x.list( );
22、 for(int i=0;icontent.length;i+) String xx=s+contenti+“; File y=new File(xx); if(y.isDirectory( ) ) show(xx); else System.out.println(blank+contenti); i-=3; ,FileOutputStream流类,FileOutputStream流类的构造方法有两个: FileOutputStream(String fileName): 参数fileName表示带路径的磁盘文件名。 FileOutputStream(File file): 参数file表示
23、为磁盘文件所建立的File对象名,Java实例以字节流方式写入文件,import java.io.*; public class File2 public static void main(String args) throws IOException char ch; File file1=new File(“c:jdk1.3examplenewFile.txt“); try FileOutputStream fout= new FileOutputStream(file1); System.out.println(“输入任一字符串,以?结束“); ch= (char) System.in.
24、read(); while (ch !=?) fout.write(ch); ch=(char) System.in.read(); fout.close(); ,catch (FileNotFoundException e) System.out.println(e); catch (IOException e) System.out.println(e); ,FileInputStream流类,FileInputStream类的构造方法有两个: FileInputStream(String fileName): 参数fileName表示带路径的磁盘文件名。 FileInputStream(
25、File file): 参数file表示为磁盘文件所建立的File对象名 。,Java实例以字节流方式读磁盘文件,import java.io.*; public class File3 public static void main(String args) throws IOException int ch; File file1=new File(“c:jdk1.3examplenewFile.txt“); try FileInputStream fin= new FileInputStream(file1); System.out.println(“文件中的信息为:“); ch= fi
26、n.read(); while (ch !=-1) System.out.print(char)ch); ch =fin.read(); fin.close(); ,catch (FileNotFoundException e) System.out.println(e); catch (IOException e) System.out.println(e); ,DataOutputStream流类,使用DataOutputStream类向文件中写入各种类型数据的操作步骤是: 为磁盘文件建立File类对象; 为该File对象建立FileOutputStream类流对象,建立其与磁盘文件的连接
27、; 为该FileOutputStream类对象建立DataOutputStream类对象,利用DataOutputStream类的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法分别向文件中写入整型、单精度型、双精度型、布尔型等数据; 写入操作完成后,利用close()方法将流关闭,断开与磁盘文件的联系。,Java实例向磁盘文件写入各类数据,import java.io.*; public class File4 public static void main(String args) int ch; InputStreamRead
28、er iin=new InputStreamReader(System.in); BufferedReader bin =new BufferedReader(iin); File file1=new File(“c:jdk1.3exampledataFile.txt“); try FileOutputStream fout= new FileOutputStream(file1); DataOutputStream dout =new DataOutputStream(fout); System.out.println(“ 输入整数“); int i=Integer.parseInt(bin
29、.readLine(); System.out.println(“ 输入浮点数“);,Java实例(续),float f=Float.parseFloat(bin.readLine(); System.out.println(“ 输入布尔量“); boolean b=new Boolean(bin.readLine().booleanValue(); dout.writeInt(i); dout.writeFloat(f); dout.writeBoolean(b); dout.close(); catch (FileNotFoundException e) System.out.printl
30、n(e); catch (IOException e) System.out.println(e); ,例-从磁盘文件读取各类数据,import java.io.*; public class File5 public static void main(String args) throws IOException int ch; File file1=new File(“c:jdk1.3exampledataFile.txt“); File file2=new File(“c:jdk1.3exampleoutFile.txt“); try FileInputStream fin= new F
31、ileInputStream(file1); DataInputStream din =new DataInputStream(fin); int i=din.readInt(); float f=din.readFloat(); boolean b=din.readBoolean(); din.close();,FileOutputStream fout= new FileOutputStream(file2); DataOutputStream dout =new DataOutputStream(fout); dout.writeInt(i); dout.writeFloat(f); d
32、out.writeBoolean(b); dout.close(); System.out.println(“整数:“+i); System.out.println(“浮点数:“+f); System.out.println(“布尔量:“+b); catch (FileNotFoundException e) System.out.println(e); catch (IOException e) System.out.println(e); ,Writer和Reader,以字符流方式向文件写入或从文件中读取数据,可以使用Writer和Reader类及其子类。 Writer和Reader类都是
33、抽象类,不能建立它们的对象,所以只能通过它们子类对象对文件进行操作。常用的Writer类的子类包括FileWriter类和BufferedFileWriter类。 FileWriter类构造方法如下: FileWriter(String fileName): 参数fileName表示带路径的磁盘文件名。 FileWriter(File file): 参数file表示为磁盘文件所建立的File对象名。 注:使用FileWriter进行文件操作时,为了减少磁盘读写次数,常常使用具有缓冲功能的BufferedWriter类。,Java实例以字符流方式写入文件,import java.io.*; pu
34、blic class File8 public static void main(String args) throws Exception InputStreamReader iin =new InputStreamReader(System.in); BufferedReader br=new BufferedReader(iin); FileWriter fw1=new FileWriter(“c:jdk1.3exampledataFile.txt“); BufferedWriter bw = new BufferedWriter(fw1); String s; while (true)
35、 System.out.print(“输入一个字符串:“); System.out.flush(); s=br.readLine(); if (s.length()=0) break; bw. write(s); bw.newLine(); bw.close(); ,例-以字符流方式读取文件,public class File9 public static void main(String args) throws Exception FileReader fr1 = new FileReader(“c:jdk1.3exampledataFile.txt“); BufferedReader b
36、r1 = new BufferedReader(fr1); BufferedWriter bw1 = new BufferedWriter( new FileWriter(“c:jdk1.3exampletargetFile.txt“); int lineNum=0; String s=br1.readLine();,while (s != null) lineNum+; bw1.write(String.valueOf(lineNum); bw1.write(“ “); bw1.write(s); bw1.newLine(); s=br1.readLine(); bw1.close(); ,
37、例-以字符流方式向显示器输出,import java.io.*; public class File11 public static void main(String args) throws Exception FileReader fr1 = new FileReader(“c:jdk1.3exampledataFile.txt“); BufferedReader br1 = new BufferedReader(fr1); BufferedWriter bw1 = new BufferedWriter( new OutputStreamWriter(System.out); int lineNum=0; String s=br1.readLine();,while (s != null) lineNum+; bw1.write(String.valueOf(lineNum); bw1.write(“ “); bw1.write(s); bw1.newLine(); s=br1.readLine(); bw1.close(); ,本章的课到此结束,本章作业:P153 8.,谢谢大家,
链接地址:https://www.31doc.com/p-2250737.html