您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Java课件 Java IO操作
Java语言与系统设计中南大学信息科学与工程学院计算机工程系黄家玮jiaweihuang@csu.edu.cn第11章JavaIO操作数据流的概念输入/输出流类标准输入和输出流文件处理和目录管理7.1输入/输出流概念流是Java语言中,用来处理输入/输出(I/O)的方式。采用流的方式,使得程序员在处理不同的数据或数据存储时,更加方便、鲜明和统一。所谓的“数据流(stream)”指的是所有数据通信通道中数据的起点和终点。如:执行的程序通常会输出各种信息到显示器,使用户可以随时了解程序的状态信息,而这些信息的通道就是一个数据流,其中的数据就是要显示的信息,数据的起点(源)就是执行的程序,而数据的终点就是显示器。以程序为参照,若程序是数据流动的起点,即数据的提供者,这个数据流就是一个“输出数据流”;若程序是数据流动的终点,这个数据流就是一个“输入数据流”。利用数据流可以简化程序的编写。对于输入数据流(程序是数据流的终点),一旦数据流建立完成后,程序可以不必关心数据流的起点是什么,只要读取自己需要的数据即可;对于输出数据流(程序是数据流的起点),一旦建立起数据流后,程序只负责提供数据,而不必理会数据流的目的地具体是什么(可能是显示器、打印机、文件、网络中的远端客户等)。5输入流为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息输出流当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个目标位置写信息6.1输入/输出流以文件输入输出为例,此时,我们可以将硬盘文件比做一个水池,内存要进行输入(读)操作,需要用一个水管连到水池,数据顺着“水管”从硬盘进入内存,此时,这个水管就是输入流;反之,内存要进行输出(写)操作,需要用一个水管连到水池,数据顺着“水管”从内存进入硬盘,此时,这个水管就是输出流。7importjava.io.*;publicclassEcho{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));Strings;while((s=in.readLine()).length()!=0)System.out.println(s);}}实例:从键盘读入信息并在显示器上显示6.1输入/输出流实例:读入不同类型的数据importjava.util.Scanner;publicclasss{publicstaticvoidmain(String[]args){Scanners=newScanner(System.in);Stringstr=s.next();//receivestringIntegeri=s.nextInt();//receiveintegerDoubled=s.nextDouble();//receivedoubleSystem.out.println(str++i++d);}}7.2输入/输出的流类在java.io包中提供了一系列用于处理输入/输出的流类。流从功能上可分为两大类:输入流和输出流。从流结构上可分为字节流和字符流,字节流以字节为处理单位,字符流以字符为处理单位。字符是由字节组成。在Java中,将所有的字符用Unicode编码,占2个字节。Java早期版本仅仅针对字节,后来随着Java使用范围的扩大,字节操作对一些中文、日文等双字节字符不太方便,因此,又增加了字符输入输出相关的API。比如,如果将“中”以字节输出,则对方收到的内容为两个字节,但是可能是乱码。如果将“中”以字符输出,则对方收到的内容为“中”,占两个字节。11面向字符的流:专门用于字符数据面向字节的流:用于一般目的6.1输入/输出流字节流的输入流和输出流的基础类是InputStream和OutputStream这两个抽象类,具体的输入/输出操作则由这两个类的子类完成。字符流的输入流和输出流的基础类是Reader和Writer这两个抽象类。Java中还提供了一个特殊类RandomAccessFile,它允许对文件进行随机访问,使用该类的对象可以实现同时对文件进行输入(读文件)或输出(写文件)操作。13数据源或目标中含有非字符数据,必须用字节流来输入/输出通常被用来读写诸如图片、声音之类的二进制数据绝大多数数据是被存储为二进制文件的,世界上的文本文件大约只能占到2%,通常二进制文件要比含有相同数据量的文本文件小得多6.1输入/输出流1字节流InputStream和OutputStream类InputStream类中包含一套以字节为处理单位的输入流处理方法,以完成最基本的向程序中读入数据的功能。InputStream是一个抽象类,具体操作的实现由其子类完成。OutputStream类中包含一套以字节为处理单位的输出流处理方法,以完成最基本的输出程序中数据的功能。OutputStream是一个抽象类,具体操作的实现由其子类完成。intavailable():获得从输入流中所能读取的字节的个数voidclose():关闭输入流intread():读取输入流中的下一个字节,返回该字节的ASCII值,范围在0~255之间;若流结束,则返回-1intread(byte[]a):从输入流中读取字节,并存储到字节数组a中。返回值为实际读取的字节数;若流结束,返回-1intread(byte[]a,intoff,intlength):从输入流中读取长度为length个字节的数据,并存储于数组a索引off位置开始处,并返回读取的字节数,若流结束,则返回-1longskip(longa):从当前位置开始,跳过a个字节的数据InputStream类中的常用方法OutputStream类中的常用方法intflush():刷空输出流,并输出所有被缓存的字节voidwrite(inta):将指定的字节a写入输出流。如果a的值大于255,则只输出它的低位字节所表示的值voidwrite(byte[]a):把字节数组a中的字节数据全部写入输出流voidwrite(byte[]a,intoff,intlength):把字节数组a中从索引off开始的length个字节写入输出流voidclose():关闭输出流7.4常用的文件处理7.4.1文件的顺序读写顺序读写指读写文件时,只能按照从头到尾的顺序进行。文件的顺序读写操作的步骤一般如下:a)引入java.io包。语句为:importjava.io.*;b)根据不同的数据源和输入/输出任务,建立字节流和字符流对象。c)若需要对字节或字符流信息组织加工,在已建立字节流或字符流对象上构建数据流对象。d)用输入/输出流对象的相应成员方法进行读/写操作,需要时可设置读/写位置指针。e)关闭流对象。1.使用文件字节流对象读写文件文件读写字节流类指的是FileInputStream类和FileOutputStream类,它们都重写或实现了其父类InputStream和OutputStream类的一些方法,以实现顺序访问本地文件。它们都是以字节为单位顺序读写一个已存在的文件。(1)创建文件输入字节流FileInputStream对象。可以用文件名、文件对象或文件描述符建立文件输入字节流对象。FileInputStream类构造方法有:a)FileInputStream(Stringfilename):用文件名filename创建输入流对象,如:FileInputStreamfis=newFileInputStream(d:/intest.dat);b)FileInputStream(Filefile):用文件对象创建输入流对象,如:Filefile=newFile(d:/intest.dat);FileInputStreamfis=newFileInputStream(file);若输入流对象创建成功,就相应地打开了对应的文件,接下来就可以从文件中读取信息了。若输入流对象创建失败(如对应的文件不存在时),将会引发异常FileNotFoundException,在程序中需要对其捕获和处理。(2)从文件中读取信息。一般用read()成员方法进行读取信息操作。(3)创建文件输出字节流FileOutputStream对象。可以用文件名、文件对象建立文件输出字节流对象。创建输出字节流对象时,若指定的文件不存在,则会自动建立一个新文件,如果指定的文件已存在,则该文件的内容将被保留或删除。FileOutputStream类的构造方法有:a)FileOutputStream(Stringfilename):用文件名filename创建输出流对象。如:FileOutputStreamfos=newFileOutputStream(d:/outtest.dat);b)FileOutputStream(Filefile):用文件对象创建输出流对象。如:Filefile=newFile(d:/outtest.dat);FileOutputStreamfos=FileOutputStream(file);(4)向文件中写入数据。一般用write()成员方法向文件中写入数据。(5)关闭流。无论是读文件还是写文件,操作完毕后,应该关闭输入流和输出流,以释放资源。关闭的方式有两种:显示关闭和隐式关闭。隐式关闭是利用Java系统的自动垃圾回收功能自动完成,但完成的时机不能确定。显示关闭使用close()方法,建议用显示方式主动关闭流。实例:写文件packagefileio;importjava.io.FileOutputStream;publicclassFileOutputTest1{publicstaticvoidmain(String[]args)throwsException{FileOutputStreamfos=newFileOutputStream(c:/info.txt);Stringmsg=“hello;fos.write(msg.getBytes());fos.close();}}close();表示关掉输出流,大家要养成好的习惯,文件操作完毕要关闭流,否则文件有可能被锁定,其它程序无法访问。不过,在某些特定的场合,不一定要频繁关闭。比如,程序每隔一段时间产生日志,将日志信息保存到文件,就不用频繁关闭。从底层讲,为了防止频繁读写,数据的输出将会先送到缓冲区,到达一定数量之后才存到硬盘,close()函数会强制将缓冲区数据存入硬盘。如果不想进行close操作,又要将缓冲区数据存入硬盘,可以调用输出流的flush()函数。实例:读文件packagefileio;importjava.io.File;importjava.io.FileInputStream;publicclassFileInputTest1{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(c:/info.txt);FileInputStreamfis=newFileInputStream(file);byte[]data=newbyte[(int)file.length()];fis.read(data);fis.close();Stringmsg=newString(data);System.out.println(msg);}}【例】实现完成文件复制功能的程序。复制的源文件和目标文件的文件名由命令行参数提供。importjava.io.*;publicclassCopyFile{publicstaticvoidmain(String[]args){intdt;FileInputStreamfis;FileOutputStreamfos;try{fis=newFileIn
本文标题:Java课件 Java IO操作
链接地址:https://www.777doc.com/doc-4468663 .html