收藏 分享(赏)

8 Java输入与输出.ppt

上传人:hyngb9260 文档编号:4895758 上传时间:2019-01-20 格式:PPT 页数:82 大小:503.50KB
下载 相关 举报
8 Java输入与输出.ppt_第1页
第1页 / 共82页
8 Java输入与输出.ppt_第2页
第2页 / 共82页
8 Java输入与输出.ppt_第3页
第3页 / 共82页
8 Java输入与输出.ppt_第4页
第4页 / 共82页
8 Java输入与输出.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

1、第八章 Java输入与输出,第八章 Java输入与输出,8.1 输入与输出 8.1.1JAVA的输入/输出机制 8.1.2JAVA.IO 8.2 流的应用 8.2.1字节流 8.2.2字符流 8.2.3 过滤流 8.2.4对象流 8.3 访问文件 8.3.1File对象 8.3.2随机访问文件,8.1 输入与输出,8.1.1 JAVA的输入/输出机制 1.输入与输出 对外部设备的输入/输出、文件读写、网络读写及线程之间的数据通信操作。 2.什么是流? 流是一种数据的源头和目的地之间的通信途径,JAVA使用流(stream)来执行输入输出功能。包括输入流与输出流。,8.1.2JAVA.IO,JA

2、VA.IO是系统提供的软件包之一,专门为应用程序提供处理I/O操作的各种类。,JAVA.IO包中的流结构,1.InputStream和OutputStream 这两个类为字节流的输入和输出类,是所有面向字节的输入/输出流的父类。声明了多个用于字节输入和输出的方法,包括读取数据、写入数据、标记位置等。 2.Reader和Write 为字符流的输入和输出类,是所有面向字符的输入/输出流的父类。这两个类是以Unicode字符为单位进行读写的。,8.1.2JAVA.IO,3.File和RandomAccessFile 这两个类为对文件操作的类。File类记载文件信息并以顺序方式访问文件, Random

3、AccessFile类以随机方式访问文件。,8.1.2JAVA.IO,什么是流?流(stream)是一组有序的数据序列。根据操作的类型,分为输入流和输出流两种。输入流的指向称为源,程序从指向源的输入流中读取数据。当程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件、内存或是网络连接。而输出流的指向是字节要去的目的地,程序通过向输出流中写入数据把信息传递到目的地。当程序需要写入数据时,就会开启一个通向目的地的流。,8.2流的应用,输入输出流的种类: 字节输入流 字节输出流 字符输入流 字符输出流,8.2流的应用,1.字节输入流InputStream 字节流是以字节为单位来处理数

4、据的,由于字节流不会对数据做任何转换,因此用来处理二进制的数据。 InputStream类是字节输入流的抽象类,它是所有字节输入流的父类,其各种子类实现了不同的数据输入流。 这些字节输入流的继承关系如下图所示。,8.2.1字节流,8.2.1字节流,输入流InputStream类的子类,InputStream中的常用方法:,8.2.1字节流,代码示例:从键盘输入一个字符,8.2.1字节流,import java.io.*; public class Test public static void main(String args)throws IOExceptionchar a;System.o

5、ut.println(“请输入任一字符“);a=(char)System.in.read();System.out.println(“你输入的字符是 “+a); ,InputStream是抽象类,并不能实例化,实际使用中使用其子类,FileInputStream类是InputStream类的子类。它实现了文件的读取,是文件字节输入流。该类适用于比较简单的文件读取,该类的所有方法都是从InputStream类继承并重写的。创建文件字节输入流常用的构造方法有两种: FileInputStream(String filePath) FileInputStream(File file),8.2.1字节

6、流,(1)FileInputStream(String filePath) 该构造方法根据指定的文件名称和路径,创建FileInputStream类的实例对象。 语法:filePath:文件的绝对路径或相对路径。,new FileInputStream (filePath);,8.2.1字节流,(2)FileInputStream(File file) 该构造方法使用File类型的文件对象创建FileInputStream类的实例对象。 语法:file:File文件类型的实例对象。,new FileInputStream (file);,8.2.1字节流,import java.io.*; p

7、ublic class Test public static void main(String args) throws IOException tryFileInputStream fis = new FileInputStream(“OpenFile.java“);int n = 512;byte buffer = new byten;while(fis.read(buffer,0,n) != -1),System.out.println();fis.close();catch(IOException ioe)System.out.println(ioe);catch(Exception

8、e)System.out.println(e); ,2.字节输出流OutputStream OutputStream类是字节输出流的抽象类,它是所有字节输出流的父类,其子类实现了不同数据的输出流。继承关系如下图所示。,8.2.1字节流,OutputStream中的方法与InputStream几乎一一对应:,8.2.1字节流,代码示例:标准输出的用法,8.2.1字节流,import java.io.*; public class Test public static void main(String args)throws IOExceptionchar a = A;System.out.wri

9、te(a);System.out.write(n);/该行不可省略 ,同样,OutputStream也是抽象类,并不能实例化,实际使用中使用其子类,FileOutputStream类是OutputStream类的子类。它实现了文件的写入,能够以字节形式写入文件中,该类的所有方法都是从OutputStream类继承并重写的。创建文件字节输出流常用的构造方法有两种: FileOutputStream(String filePath) FileOutputStream(File file),8.2.1字节流,(1)FileOutputStream(String filePath) 该构造方法根据指定

10、的文件名称和路径,创建关联该文件的FileOutputStream类的实例对象。 语法:filePath:文件的绝对路径或相对路径。,new FileOutputStream (filePath);,8.2.1字节流,(2)FileOutputStream(File file) 该构造方法使用File类型的文件对象,创建与该文件关联的FileOutputStream类的实例对象。 语法:file:File文件类型的实例对象。在file后面,加true会对原有内容进行追加,不加true会将原有内容覆盖。,new FileOutputStream (file);,8.2.1字节流,import j

11、ava.io.*; public class Test public static void main(String args)throws IOException trySystem.out.print(“Input: “);int count,n = 512;byte buffer = new byten;count = System.in.read(buffer);FileOutputStream fos = newFileOutputStream(“write.txt“);fos.write(buffer,0,count);fos.close();System.out.println(

12、“Save to write.txt“);,catch(IOException ioe) System.out.println(“File write error:“+ioe); ,8.2.1字节流,字符流(charactercstreams)用于处理字符数据的读取和写入,它以字符为单位。 Reader类和Writer类是字符流的抽象类,它们定义了字符流读取和写入的基本方法,各个子类会依其特点实现或覆盖这些方法。,8.2.2字符流,1.Reader类 帮助用户在Unicode流内获得字符数据。该类为抽象类,所以实际使用其子类。直接继承自Reader类的子类图如下:,8.2.2字符流,Reade

13、r类是所有字符输入流的父类,它定义了操作字符输入流的各种方法。常用方法如下表所示。,8.2.2字符流,(1) InputStreamReader类 InputStreamReader 是字节流通向字符流的桥梁。它可以根据指定的编码方式,将字节输入流转换为字符输入流。创建字符输入流常用的构造方法有两种: InputStreamReader(InputStream in) InputStreamReader(InputStream in, String cname),8.2.2字符流,InputStreamReader(InputStream in) 该构造方法使用默认字符集创建InputStre

14、amReader类的实例对象。 语法如下:in:字节流类的实例对象。,8.2.2字符流,new InputStreamReader(in);,InputStreamReader(InputStream in, String cname) 该构造方法使用已命名的字符编码方式创建InputStreamReader类的实例对象。 语法如下:cname:使用的编码方式名。 InputStreamReader类常用的方法如下表所示。,new InputStreamReader(in,cname);,8.2.2字符流,8.2.2字符流,(2)FileReader类 FileReader类是Reader类的

15、子类,它实现了从文件中读出字符数据,是文件字符输入流。该类的所有方法都是从Reader类中继承来的。FileReader类的常用构造方法有两种: FileReader(String filePath) FileReader(File file),8.2.2字符流,FileReader(String filePath) 该构造方法根据指定的文件名称和路径,创建FileReader类的实例对象。 语法如下:filePath:文件的绝对路径或相对路径。,8.2.2字符流,new FileReader(filePath);,FileReader(File file) 该构造方法使用File类型的文件对

16、象创建FileReader类的实例对象。 语法如下:file:File文件类型的实例对象。,new FileReader(file);,8.2.2字符流,例如,利用FileReader读取文件“Example5-1.txt”的内容,输出到控制台上程序代码为:,try File f=new File(“C:Example5-1.txt“);FileReader fr=new FileReader(fchar data=new char512;int rs=0;while(rs=fr.read(data)0)String str=new String(data,0,rs);System.out.p

17、rintln(str); catch (Exception e) e.printStackTrace(); ,8.2.2字符流,(3) BufferedReader类 BufferedReader类是Reader类的子类,使用该类可以以行为单位读取数据。 BufferedReader类的主要构造方法为:该构造方法使用Reader类的对象,创建一个BufferReader对象。 语法如下:,8.2.2字符流,new BufferedReader(in);,BufferedReader(Reader in),BufferedReader 类中提供了一个ReaderLine()方法,Reader类中

18、没有此方法,该方法能够读取文本行。例如:,8.2.2字符流,FileReader fr; try fr = new FileReader(“C:Example6.txt“);BufferedReader br = new BufferedReader(fr);String aline;while (aline=br.readLine() != nullString str=new String(aline);fr.close();br.close(); catch (Exception e) e.printStackTrace(); ,2.Writer类 Writer类为字符输出的抽象基础类,

19、可以利用其子类来完成种类型流的输出。直接继承自Writer类的类如下图所示。,8.2.2字符流,Writer类是所有字符输出流的父类,它定义了操作输出流的各种方法。常用方法如下表所示:,8.2.2字符流,(1)OutputStreamWriter OutputStreamWriter 是字节流通向字符流的桥梁。写出字节,并根据指定的编码方式,将之转换为字符流。创建字符输出流常用的构造方法有两种。 OutputStreamWriter(OutputStream out) OutputStreamWriter(OutputStream out,String cname),8.2.2字符流,Outp

20、utStreamWriter(OutputStream out) 该构造方法使用默认字符集创建OutputStreamWriter类的实例对象。 语法如下:out:字节流类的实例对象。,8.2.2字符流,new OutputStreamReader(out);,OutputStreamWriter(OutputStream out,String cname) 该构造方法使用已命名的字符编码方式创建OutputStreamWriter类的实例对象。 语法如下:cname:使用的编码方式名。,new OutputStreamWriter(out,cname);,8.2.2字符流,OutputStr

21、eamReader类常用的方法如下表所示:,8.2.2字符流,(2) FileWriter类 FileWriter类是Writer类的子类,它实现了将字符数据写入文件中,是文件字符输出流。该类的所有方法都是从Writer类中继承来的。FileWriter类的常用构造方法有两种: FileWriter(String filePath) FileWriter(File file),8.2.2字符流,FileWriter(String filePath) 该构造方法根据指定的文件名称和路径,创建关联该文件的FileWriter类的实例对象。 语法如下:,8.2.2字符流,new FileWriter

22、(filePath);,FileWriter(File file) 该构造方法使用File类型的文件对象,创建与该文件关联的FileWriter类的实例对象。 语法如下:,8.2.2字符流,new FileWriter(file);,例, “Example5-1.txt”的内容复制到文件“Example6.txt”中。具体代码为:,try File f=new File(“C:“,“Example6.txt“);if (!f.exists()/ 如果文件不存在f.createNewFile();/ 创建新文件FileReader fr=new FileReader(“C:Example5-1.

23、txt“);/FileWriter fWriter=new FileWriter(f);/int is;while(is=fr.read() != -1)fWriter.write(is);/ 将数据写入输出流fr.close();fWriter.close(); catch (Exception e) e.printStackTrace(); ,8.2.2字符流,(3)BufferedWriter类 BufferedWriter类是Writer类的子类,该类可以以行为单位写入数据。BufferedWriter类常用的构造方法为:该构造方法使用Writer类的对象,来创建一个BufferWri

24、ter对象。 语法如下:,new BufferedReader(out);,BufferedWriter(Writer out),8.2.2字符流,BufferedWriter类提供了一个newLine()方法,Writer类中没有此方法。该方法是换行标记。例如:,File file=new File(“C:Example6.txt“); FileWriter fos; try fos = new FileWriter(file,true);BufferedWriter bw=new BufferedWriter(fos);bw.write(“Example“);bw.newLine();bw

25、.write(“Example“);bw.close(); catch (IOException e) e.printStackTrace(); ,8.2.2字符流,(4) PrintWriter类 PrintWriter是打印输出流,该流把Java语言的内构类型以字符表示形式送到相应的输出流中,可以以文本的形式浏览。创建该打印输出流常用的构造方法有两种。 PrintWriter(Writer out) PrintWriter(OutputStream out),8.2.2字符流,PrintWriter(Writer out) 该构造方法使用Writer类的对象,创建一个PrintWriter

26、对象。 语法:,new PrintWriter(out);,8.2.2字符流,PrintWriter(OutputStream out) 该构造方法使用OutputStream类的对象,创建一个PrintWriter对象。 语法:,new PrintWriter(out);,8.2.2字符流,PrintWriter类常用的方法如下表所示:,8.2.2字符流,使用PrintWriter实现文件的复制执行过程为:,File filein=new File(“C:Example6.txt“); File fileout=new File(“C:Example7.txt“); try Buffered

27、Reader br=new BufferedReader(new FileReader(filein);/创建一个PrintWiter对象PrintWriter pw=new PrintWriter(new FileWriter(fileout); int b;/读出文件“Example6.txt”中的数据while(b=br.read()!=-1)pw.println(b);/写入文件中br.close();/关闭流pw.close();/关闭流 catch (Exception e) e.printStackTrace(); ,过滤器流(FilterStream)是为某种目的过滤字节或字符

28、的数据流。基本输入流提供的读取方法,只能用来读取字节或字符。而过滤器流能够读取整数值、双精度值或字符串。但需要一个过滤器类来包装输入流。 DataInputStream 和DataOutputStream类分别是FilterInputStream和FilterOutputStream类的子类。它们分别实现了DataInput和DataOutput接口,该接口中定义了独立于具体机器的带格式的读写操作,从而可以实现对Java中的不同基本类型数据的读写。,8.2.3过滤流,例,从文件中读取数字。可以先创建一个FileInputStream类的对象,然后把该类传递给一个DataInputStream的

29、构造方法。,FileInputStream fis = new FileInputStream(“Example.txt“); DataInputStream dis=new DataInputStream(fis); double d = dis.readDouble(); dis.close();,8.2.3过滤流,再例如,把数据写入文件。可以先创建一个FileOutputStream类的对象,然后把该类传递给一个DataOutputStream的构造方法。,FileOutputStream fos=new FileOutputStream(“Example.txt“); DataOutp

30、utStream dos=new DataOutputStream(fos); dos.writeBytes(“Example“); dos.close();,8.2.3过滤流,使用对象输入输出流实现对象序列化可以直接存取对象。 将对象存入一个流称为序列化。而从一个流将对象读出称为反序列化。,8.2.4对象流,1. ObjectInput与ObjectOutput ObjectInput接口与ObjectOutput接口分别继承了DataInput接口和DataOutput接口,提供了对基本数据类型和对象序列化的方法。使用对象序列化功能可以非常方便地将对象写入输出流,或者从输入流读取对象。Ob

31、jectInput接口与ObjectOutput接口中定义的对象反序列化和序列化方法如下。,8.2.4对象流,(1)readObject()所谓反序列化就是从输入流中获取序列化的对象数据,用这些数据生成新的Java对象。该方法定义在ObjectInput接口中,由ObjectInputStream类实现。 语法如下:object:Java对象。 注意:使用readObject()方法获取的序列化对象是Object类型的,必须通过强行类型转换才能使用。,Object object=readObject(),8.2.4对象流,(2)writeObject () 序列化就是将对象写入到输出流,这个输

32、出流可以是文件输出流、网络输出流以及其他数据输出流。该方法定义在ObjectOutput接口中,由ObjectOutputStream类实现。 语法:object:将要序列化的对象。 注意:被序列化的对象必须实现java.io.Serializable接口,否则不能实现序列化。,writeObject(object);,8.2.4对象流,2. ObjectInputStream与ObjectOutputStream Java提供了ObjectInputStream和ObjectOutputStream类读取和保存对象,它们分别是对象输入流和对象输出流。ObjectInputStream类和Ob

33、jectOutputStream类是InputStream类和OutputStream类的子类,继承了它们所有的方法。 创建ObjectInputStream 类的构造方法为:当准备从读取一个对象到程序中时,可以用ObjectInputStream类创建对象输入流。 语法如下:,ObjectInputStream(InputStream in),new ObjectInputStream(in);,8.2.4对象流,ObjectInputStream类读取基本数据类型的方法为:对象输入流使用该方法读取一个对象到程序中。例如:创建ObjectOutputStream类的构造方法为:,readOb

34、ject(),FileInputStream fis=new FileInputStream(“Example.txt“); ObjectInputStream ois=new ObjectInputStream(fis); ois.readObject(); ois.close();,ObjectOutputStream(OutputStream out),8.2.4对象流,当准备将一个对象写入到输出流(即序列化),可以用ObjectOutputStream类创建对象输出流。语法如下:ObjectOutputStream类写入基本数据类型方法为:对象输出流使用该方法将对象写入到文件中。例如:

35、,FileOutputStream fos=new FileOutputStream(“Example.txt“); ObjectOutputStream obs=new ObjectOutputStream(fos); obs.writeObject(“Example“); obs.close();,new ObjectOutputStream(out);,WriteObject(),8.2.4对象流,8.3.1File对象 File类是一个与流无关的类。File类的对象可以获取文件及其文件所在的目录、文件的长度等信息。创建一个File对象的常用构造方法有3种: (1)File(String

36、 pathname) (2)File(String path,String filename) (3)File(File file,String filename),8.3访问文件,(1)File(String pathname) 该构造方法通过指定的文件路径字符串来创建一个新File实例对象。 语法:pathname:文件路径字符串,包括文件名称。就是将一个代表路径的字符串转换为抽象的路径。,new File(filename);,8.3.1File对象,(2)File(String path,String filename) 该构造方法根据指定的父路径字符串和子路径字符串(包括文件名称)创

37、建File类的实例对象。 语法:path:父路径字符串。 filename:子路径字符串,不能为空。,new File(path, filename);,8.3.1File对象,(3)File(File file,String filename) 该构造方法根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建File类的实例对象。 语法:file:是父路径对象。 filename:子路径字符串。,new File(file,filename);,8.3.1File对象,File类包含了文件和文件夹的多种属性和操作方法。常用的方法如下表所示。,8.3.1File对象,使用Rand

38、omAccessFile类可以读取任意位置数据的文件。RandomAccessFile类既不是输入流类的子类,也不是输出流类的子类。RandomAccessFile类常用的构造方法有两种: RandomAccessFile(String name,String mode) RandomAccessFile(File file,String mode),8.3.2随机访问文件,(1)RandomAccessFile(String name,String mode) 语法如下:name:和系统相关的文件名。 mode:用来决定创建的流对文件的访问权利,它可以是r、rw、rws或rwd,r代表只读,

39、 rw代表可读写,rws代表同步写入,rwd代表将更新同步写入。,new RandomAccessFile(name,mode);,8.3.2随机访问文件,(2)RandomAccessFile(File file,String mode) 语法如下:file:一个File类的对象。 RandomAccessFile类常用的方法如下表所示:,new RandomAccessFile(file,mode);,8.3.2随机访问文件,8.3.2随机访问文件,利用上述方法显示文件本身源代码的执行过程如下:,8.3.2随机访问文件,try File f=new File(“C:Example8.txt

40、“); RandomAccessFile raf=newRandomAccessFile(f,“rw“); /创建随机访问文件为读写 long filepoint=0;/定义文件总长度变量 long filel=raf.length();/获取文件的长度 while(filepointfilel)String str=raf.readLine();/从文件中读取数据System.out.println(str);filepoint=raf.getFilePointer(); raf.close(); catch (Exception e) e.printStackTrace(); ,int d

41、ata_arr = 12,31,56,23,27,1,43,65,4,99; try RandomAccessFile randf = new RandomAccessFile(“e:/write.txt“,“rw“);for(int i=0;i=0;i-)randf.seek(i*4);System.out.println(randf.readInt();randf.close(); catch(IOException ioe)System.out.println(“file access error“); ,try DataOutputStream dataout = new DataOu

42、tputStream(new FileOutputStream(“random.txt“);dataout.writeBytes(“Thisn“);dataout.writeBytes(“isn“);dataout.writeBytes(“me.n“);dataout.close();,/接上页 File inFile = new File(“random.txt“); RandomAccessFile inData = new RandomAccessFile(inFile,“rw“);long len = inData.length();inData.seek(len); System.o

43、ut.println(“before writing,offset is “+inData.getFilePointer();inData.writeBytes(“End!n“); System.out.println(“after writing,offset is “+inData.getFilePointer(); catch(IOException ioe)System.out.println(“file access error“);,其它,1. System.in获取用户输入 System类中用于获取用户输入流的语法为:in:是静态变量,类型是InputStream。 Java实现

44、键盘输入的一般过程为:,InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); try String str=br.readLine();br.close(); catch (IOException e) e.printStackTrace(); ,System.in,2. Scanner类 Scanner是JDK1.5新增的一个类,是java.util包中的类。该类用来实现用户的输入,是一种只要有控制台就能实现输入操作的类。创建Scanner类常见的构造方法有两种。 (1)Scanner(InputStream in) 语法如下:,new Scanner(in);,(2)Scanner(File file) 语法如下:通过控制台进行输入,首先要创建一个Scanner对象。例如:,Scanner sc=new Scanner(System.in); sc.next(); sc.close();,new Scanner(file);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报