




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章输入输出流与文件程序的一项重要功能是能够与外部设备进行交互,通过数据的输入和输出功能,实现计算机与外部设备的交互。Java类库中的java.io包提供了一系列输入输出流,实现了不同形式的读写方法。第9章输入输出流与文件9.1输入输出流简介9.2字节输入输出流9.3字符输入输出流9.4文件的创建与访问9.5标准输入输出流9.1输入输出流简介在Java中进行数据的输入和输出时,采用顺序的流传输方式。流是在两个设备间传输的线性的、连续的数据序列。流(Stream)分为输入流和输出流:输入流是从外部设备向计算机程序流动的数据序列,程序对输入流进行读操作;输出流是从计算机程序向外部设备流动的数据序列,程序对输出流进行写操作。9.1输入输出流简介输入输出数据流的传输方式:9.1输入输出流简介Java类库中的java.io包中包含对输入流和输出流的相关处理类。java.io包中的类分为两部分:字节输入输出流(ByteStreams)处理类,字节流用来读写8位的字节数据。字符输入输出流(CharacterStreams)处理类,字节流用来读写16位的字节数据。9.2字节输入输出流字节流用来读写8位的字节数据,InputStream类和OutputStream类是所有字节输入输出流类的父类,InputStream类和OutputStream类是抽象类,不能用来创建对象,只能使用它们的派生类进行字节流的读写。InputStream类实现对8位的输入字节流进行与读操作,OutputStream类包括对8位的输出字节流进行与写操作。I字节输入流InputStream字节输入流是通过继承抽象类InputStream类来实现的。从功能上,InputStream类主要提供了以下三类方法:读取数据定位数据关闭数据流字节输入流1.读取数据InputStream类提供了3个重载的read方法,实现对字节输入流的读取。它们只能读取8位的字节数据。publicabstractintread()throwsIOException方法的作用是从输入流中读取一个字节,如果读到输入流末尾,返回-1。该方法是一个抽象方法,InputStream类的子类必须覆盖该方法。publicint
read(byte[]b)throwsIOException从输入流中读取多个字节,放入字节数组b中。读取的字节数为数组b的长度b.length。publicint
read(byte[]b,intoff,int
len)throwsIOException从输入流中读取参数len个字节,放入字节数组b中,数据的放置位置从数组b的off位置开始,依次存放。如果输入流的数据小于len字节,以实际读取的字节数为准;字节输入流2.定位数据实际应用中,对输入流的读取并不是全部从头开始,因此在读输入流之前,需要确定读取的开始位置。•publiclongskip(longn)throwsIOException从输入流当前位置向后跳过或丢弃参数指定的n个字节,并返回实际跳过的字节数。如果输入流的长度小于n,该方法跳过的实际字节数为输入流从当前位置到最后的长度。因此,skip方法的返回值的大小可能小于n。•publicvoidmark(int
readlimit)throwsIOException在输入流的当前位置处做一个标记。参数readlimit表示做出标记后,当读取的字节数达到readlimit时,标记失效。•publicvoidreset()throwsIOException重新定位输入流的当前位置到mark()方法标记的位置。•publicboolean
markSupported()测试输入流是否支持mark()和reset()方法,如果支持,返回布尔值true;反之,返回false。字节输入流3.关闭输入流publicvoidclose()throwsIOException关闭输入流,断开与外部数据源的连接,并释放连接占用的相关系统资源。如果发生I/O错误,则抛出IOException异常。当输入流使用完毕,需要调用该方法关闭流。如果不关闭流,将会发生不可预知的错误。字节输入流InputStream类提供了一系列数量很多、功能丰富的子类,分别实现对不同场合、不同类型字节数据流的操作。字节输入流输入字节流功能描述FileInputStream实现从文件系统中的文件接收字节输入。PipedInputStream管道输入流通过管道与管道输出流连接,提供写入到管道输出流上的数据。FilterInputStream在基本输入流的基础上增加一些数据转换的功能。ByteArrayInputStream包含一个内部缓冲区,实现内存字节数据的读取。SequenceInputStream能够实现多个输入流的逻辑连接功能。ObjectInputStream能够从一个ObjectOutputStream对象中反串行化基本类型数据和对象数据。DataInputStream能够以独立于机器表达的方式,从一个输入流中读取基本数据类型数据BufferedInputStream能够在其它输入流的基础上实现数据缓冲的功能。PushbackInputStream在其它输入留的基础上增加了其它的功能,即在读取输入流时,能够跳过一个字节。字节输出流字节输出流输出8位的字节数据流,是通过继承抽象类OutputStream类来实现的。OutputStream类提供了一系列对字节输出流进行相关处理的方法。从功能上,OutputStream类主要提供了以下两类方法:1.写入数据2.关闭输出流字节输出流1.写入数据publicabstractvoidwrite(intb)throwsIOException将参数b指定的字节写入输出流,通常将b的低8位写入输出流,而忽略b的高24位。如果发生I/O错误,则抛出IOException异常。publicvoidwrite(byte[]b)throwsIOException将字节数组b写入输出流,写入输出流的字节长度为b.length。如果数组b为空数组,则发生NullPointerException异常。publicvoidwrite(byte[]b,intoff,int
len)throwsIOException将参数字节数组b从参数off指定的位置开始写入len个字节到输出流。如果off+len的值大于b.length,则抛出IndexOutOfBoundsException异常。publicvoidflush()throwsIOException强制清空输出流缓冲区,将数据立即写入与输出流连接的外设上。publicvoidclose()throwsIOException关闭输出流,断开与外部数据源的连接,并释放连接占用的相关系统资源。如果发生I/O错误,则抛出IOException异常。当输出流使用完毕,需要调用close()方法。在一些应用中,如果没有调用close方法关闭输入流,将会发生不可预知的错误。字节输出流OutputStream类提供了一系列数量很多、功能丰富的子类,分别实现对不同场合、不同类型字节数据流的写入操作。字节输出流OutputStream输出字节流功能描述FileOutputStream用来将数据写入到一个文件或者一个FileDescriptor中PipedOutputStream能够被连接到一个管道输入流上,来创建一个通信管道。FilterOutputStream实现对输出流的过滤功能,是所有实现过滤功能的输出流的父类。ByteArrayOutputStream能够将数据写入到一个字节数组中。ObjectOutputStream能够将基本类型数据和对象数据写入到输出流中。DataOutputStream能够以基本数据类型的格式,将数据写入到输出流中。BufferedOutputStream能够实现一个缓冲输出流。PintStream能够在一个输出流的基础上添加一些其它的功能,即能够很方便地输出各种数据类型的数据。SequenceOutputStream把多个输出字节流合并为一个输出流9.3字符输入输出流字符流主要用于对16位Unicode国际统一标准字符编码的输入和输出,实现程序和文本数据输入和输出的标准化和国际化。字符输入输出流的两个超类是Reader类和Writer类。Reader类提供读取16位字符数据的相关方法,Writer提供了对16位字符数据进行写操作的各种方法。Reader类和Writer类都是抽象类,不能用来创建对象,只能使用它们的派生类进行字节流的读写。
字符输入流Reader所有字符输入流的超类为Reader类,这是一个抽象类。Reader类提供了读取16位字符的方法,其它字符输入流通过继承Reader类拥有其中的方法。Reader类提供的方法与InputStream类类似,只不过输入流是以16位长度的字符为单位。字符输入流ReaderReader类的子类:字符输入流Reader字符输入流功能描述BufferedReader能够从字符输入流中读取文本数据,并且提供缓冲功能,提高文本读取的效率。InputStreamReader
实现从字节输入流到字符输入流的转换。FileReader
能够非常方便地实现字符文件的读取。FilterReader是实现输入字符流读取的抽象类CharArrayReader用于实现一个用于字符输入流的字符缓冲区。PipedReader实现基于管道的字符输入流。StringReader是一个输入源为字符串常量的字符输入流。LineNumberReader是一个缓冲字节输入流,能够确定字符的行号。PushbackReader在进行字符流的读取时,实现跳过若干个字符的功能。字符输出流Writer字符输出流输出16位的字符数据,是通过继承抽象类Writer类来实现的。Writer类提供的方法与字节输出流OutputStream类的方法类似,只是Writer类一次写入16位字符,后者写入8个字符。Writer类常用的派生类:字符输出类功能描述BufferedWriter实现字符流的写入,并提供字符输出流的缓冲功能,以提高字流输出的效率。OutputStreamWriter实现字符输出流与字节输出流的转换,能够将字符输出流转换为字节输出流。FileWriter能够非常方便地实现字符文件的写入。FilterWriter是实现输出字符流写入功能的抽象类PipedWriter实现基于管道的字符输出流。CharArrayWriter用于实现一个用于字符输出流的字符缓冲区。StringWriter能够将字符输出流保存在一个字符串缓冲区对象内,以生成一个字符串。9.4文件的创建与访问在I/O处理中,最常见的就是对文件的读写操作。Java类库提供了丰富的文件类实现对文件的操作。如:File类,FileInputStream类,FileOutputStream类,RandomAccessFile类等。File类File类用来直接处理文件和目录系统,它用来描述与文件本身相关的属性,并提供了一些方法来获得和修改文件的信息,如文件的名称、目录、长度、访问权限等信息。File类中的常用方法描述如下:1.File类的构造方法2.文件名的操作方法3.文件属性的相关方法4.对目录操作的方法File类1.File类的构造方法•File(Stringpathname)该方法用来创建一个文件类对象,参数pathname表示文件的路径名。 •File(Stringpathname,Stringfilename)该方法用来创建一个文件类对象,第一个参数pathname表示文件的路径名,第二个参数filename表示文件名。 •File(Fileparent,Stringfilename)该方法用来创建一个文件类对象,第一个参数parent是一个File类的对象,用来指明文件的路径,第二个参数filename表示文件名。File类例如要创建文件类对象,它的路径为:d:\myjava\1.txt。可用以下三种构造方法来实现:FilemyFile1=newFile(“d:\\myjava\\1.txt”);或FilemyFile2=newFile(“d:\\myjava”,“1.txt”);或FilemyDir=newFile(“d:\\myjava”);FilemyFile3=newFile(myDir,“1.txt”);注意,在java中,路径的分隔符为“\\”,而不是反斜杠“\”。File类2.文件名的操作方法•StringgetName()返回文件对象的名字,用字符串表示,如果为空,则返回null。•StringgetParent()返回文件对象所在的目录,用字符串表示,目录不存在时,返回null。•FilegetParentFile()返回文件对象所在的目录文件对象。•StringgetPath()返回文件的相对路径,用字符串表示。•StringgetAbsolutePath()返回文件的绝对路径,用字符串表示。•boolean
renameTo(File
dest)用参数dest重命名指定的文件。方法的返回值为布尔型,用来验证重命名操作是否成功。•boolean
createNewFile()throwsIOException当文件不存在时,创建一个空文件。如果文件创建成功,返回true;如果文件已经存在,则返回false。File类importjava.io.*;publicclasstestFileName{publicstaticvoidmain(String
args[]){Filef1=newFile("d:\\myjava\\1.txt");Filef2=newFile("d:\\myjava","2.txt");try{System.out.println(f1.createNewFile());//创建空文件
System.out.println(f2.createNewFile());//创建空文件
}catch(IOExceptione){}
System.out.println("文件名为:"+f1.getName());
System.out.println("文件路径为:"+f1.getPath());
System.out.println("文件所在的目录为:"+f1.getParent());}}File类3.文件属性的相关方法•boolean
canRead()返回文件的读权限,即是否允许应用程序读取该文件。如果可读,返回布尔值true,否则,返回false。•boolean
canWrite()返回文件的写权限,即是否允许应用程序修改该文件。如果可写,返回布尔值true,否则,返回false。•booleanexists()测试文件是否存在。如果存在,返回布尔值true,否则,返回false。该方法可以与createNewFile()方法结合使用,首先测试文件是否存在,如果返回false,则调用createNewFile()方法创建空文件。
•boolean
isDirectory()测试文件是否是目录,如果是,返回布尔值true,否则,返回false。•boolean
isFile()测试文件是否是一般文件,如果是,返回布尔值true,否则,返回false。3.文件属性的相关方法--续•boolean
isAbsolute()测试文件是否是绝对路径,如果是,返回布尔值true,否则,返回false。•boolean
setLastModified(longtime)设置文件或目录的最后修改时间为参数time指定的时间,如果操作成功,返回布尔值true,否则返回false。•boolean
setReadOnly()设置文件或目录的访问权限为“只读”属性,如果操作成功,返回布尔值true,否则返回false。•longlength()返回文件的长度。•longlastModified()返回文件最近一次被修改的时间。时间是长整型数,为文件最近一次被修改的时间与1970年1月1日0点之间的毫秒数。File类4.对目录操作的方法•boolean
mkdir()创建目录,如果目录创建成功,则返回布尔值true,如果目录已经存在,返回false。•boolean
mkdirs()创建目录,包括所有不存在的父目录。如果目录创建成功,则返回布尔值true,如果目录已经存在,返回false。•String[]list()返回目录对象下的所有文件,并保存在字符串数组中。如果对象不是目录,则返回null。•String[]list(FilenameFilterfilter)返回目录对象下的所有满足文件过滤器filter规定的文件,并保存在字符串数组中。如果对象不是目录,则返回null。•File[]listFiles()返回指定目录对象下的所有文件,并保存在文件数组中。如果指定文件对象不是目录,则返回null。•File[]listFiles(FilenameFilterfilter)返回指定目录对象下的所有满足文件过滤器filter规定的文件,并保存在文件数组中。如果指定文件对象不是目录,则返回null。•staticFile[]listRoots()返回可用文件系统的根目录结构,并保存在文件数组中。如果找不到根目录,则返回null。FileInputStream类FileInputStream类用来打开一个文件,实现对本地文件系统中的文本文件进行顺序读取。FileInputStream类是InputStream类的子类,因此,它拥有InputStream类的所有属性FileInputStream类FileInputStream类的构造方法:•publicFileInputStream(Filefile)throwsFileNotFoundException通过打开一个与实际文件的连接创建一个文件输入流,文件由参数file指定。当参数指定的文件名或文件的路径不对时,将引起文件不能读出错误,系统会抛出FileNotFoundException异常。这是一个非运行时异常,必须捕获或声明抛弃。•publicFileInputStream(Stringname)throwsIOException通过打开一个与实际文件的连接创建一个文件输入流,文件名和存放位置由字符串类型的参数name指定。例如,要创建一个文件输入流,文件是“d:\abc\a.txt”,可以用两种方法来实现:FileInputStream
fs=newFileInputStream(“d:\\abc\\a.txt”);或者Filef=newFile(“d:\\abc\\a.txt”);FileInputStreamfs=newFileInputStream(f);FileInputStream类FileInputStream类主要用于建立与磁盘文件的连接,并从文件中读取数据。FileInputStream类的使用分以下三步进行:创建FileInputStream类的对象实例,建立与实际文件的连接,创建文件输入流。从新创建的文件输入流对象中读取数据。使用close()方法关闭输入流。FileInputStream类importjava.io.*;publicclassFileRead{publicstaticvoidmain(String[]args){
intb; try{ FileInputStreamfis=newFileInputStream("d:\\abc\\a.txt");
while((b=fis.read())!=-1)
System.out.print((char)b);
fis.close(); }catch(Exceptione){
System.out.println(e.toString());}}}FileOutputStream类FileOutputStream类用来打开一个输出文件,向该文本文件写入数据。FileOutputStream类是OutputStream类的子类,因此,它拥有OutputStream类中的所有属性,FileOutputStream类FileOutputStream类的构造方法:•publicFileOutputStream(Filefile)throwsFileNotFoundException通过打开一个与实际文件的连接创建一个文件输出流,文件由参数file指定的已存在的File对象指定。当参数指定的文件名或路径不对等原因,引起文件不能读出错误,系统会抛出FileNotFoundException异常。这是一个非运行时异常,必须捕获或声明抛弃。•publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException通过打开一个与实际文件的连接创建一个文件输出流,文件由参数file指定的已存在的File对象指定。构造方法的第二个参数append是一个布尔型的变量,当它的值为true时,将数据写在文件的末尾;如果值为false,将从文件头开始写数据。•publicFileOutputStream(Stringname)throwsIOException通过打开一个与实际文件的连接创建一个文件输出流,文件名和存放位置由字符串类型的参数name指定。•publicFileOutputStream(Stringname,booleanappend)throwsIOException通过打开一个与实际文件的连接创建一个文件输出流,文件名和存放位置由字符串类型的参数name指定。构造方法的第二个参数append是一个布尔型的变量,当它的值为true时,将数据写在文件的末尾;如果值为false,将从文件头开始写数据。FileOutputStream类下面是创建一个文件输出流,文件的位置为“d:\abc\a.txt”,并规定从文件末尾写数据。可以用两种构造方法实现,分别为:
Filef=newFile(“d:\\abc\\a.txt”);FileOutputStreamfos=newFileOutputStream(f,true);或
FileOutputStreamfos=newFileOutputStream(“d:\\abc\\a.txt”,true);FileOutputStream类FileOutputStream类主要用于建立与磁盘文件的连接,并向文件写入数据。FileOutputStream类的使用分以下三步进行:创建FileOutputStream类的对象实例,建立与实际文件的连接,创建文件输出流。向文件输出流对象中写入数据。数据写入完毕,使用close()方法关闭输入流。FileOutputStream类importjava.io.*;publicclassFileWrite{publicstaticvoidmain(String[]args){ char[]b={'g','o','o','d','b','y','e'}; try{ FileOutputStreamfos=new_FileOutputStream("d:\\abc\\a.txt",true);
for(inti=0;i<b.length;i++)
fos.write(b[i]);
fos.close(); }catch(IOExceptione){
System.out.println(e.toString());}}}RandomAccessFile类随机文件读写类(RandomAccessFile类),它能够实现文件的随机访问功能,并对文件内容同时进行数据的读取和写入功能。RandomAccessFile类直接继承Object类,还实现了DataInput和DataOutput接口,提供了丰富的支持随机文件操作的方法。RandomAccessFile类1.RandomAccessFile类的构造方法•publicRandomAccessFile(Filef,Stringmode)throwsFileNotFoundException通过打开一个与实际文件的连接创建一个随机读写文件流,文件由参数f代表的已存在的File对象指定。第二个参数mode代表文件的访问模式,即用何种方式打开和访问指定的文件。参数mode共有两种取值:“r”代表以只读方式打开文件,只能读取文件内容;“rw”代表以读写方式打开文件,可以对文件进行读取和写入操作。当参数指定的文件名或文件路径不对时,系统会抛出FileNotFoundException异常。•publicRandomAccessFile(Stringname,Stringmode)throwsFileNotFoundException通过打开一个与实际文件的连接创建一个文件输入流,文件由参数name指定。第二个参数mode代表文件的访问模式,即用何种方式打开和访问指定的文件。RandomAccessFile类同其它文件流相比,在创建RandomAccessFile类的对象实例时,除了要指明文件对象和文件名之外,必须指明访问文件的模式。例如:Filef=newFile(“file.txt”);RandomAccessFilerf=newRandomAccessFile(f,“r”);//创建只读随机文件访问流rfRandomAccessFilerf=newRandomAccessFile(f,“rw”);//创建读写随机文件访问流rfRandomAccessFilerf=newRandomAccessFile(“file1.txt”,“r”);//创建只读随机文件访问流rfRandomAccessFilerf=newRandomAccessFile(“file2.txt”,“rw”);//创建读写随机文件访问流rfRandomAccessFile类2.文件读写位置的定位操作RandomAccessFile类能够实现对文件内容的随机读写操作,也就是说,能够从文件的任意位置开始对文件进行读写操作。
定位操作相关方法为:•publiclonggetFilePointer()throwsIOException•publicvoidseek(longpos)throwsIOException•publiclonglength()throwsIOException•publicvoidsetLength(longnewLength)throwsIOException•publicint
skipBytes(intn)throwsIOExceptionRandomAccessFile类3.RandomAccessFile类的的读方法RandomAccessFile类中拥有丰富的、功能强大的数据读取方法,不但能够直接读取字节数据,还能直接读取各种类型的数据。例如:•publicfinaldoublereadDouble()throwsIOException从文件的当前位置读取64位数据,转换为double型数据,并返回该数据。•publicfinalfloatreadFloat()throwsIOException从文件的当前位置读取32位数据,转换为float型数据,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年音响机芯项目投资价值分析报告001
- 2025年吡哌酸项目投资风险评估报告
- 2025-2030年铜合金熔剂项目投资价值分析报告
- 实际问题与方程例5
- 2025-2030年钢管焊接成套设备项目投资价值分析报告
- 儿童文学简述学习资料
- 新概念英语口语Lesson25省公开课金奖全国赛课一等奖微课获奖课件
- 新生儿水肿课件
- 饰品行业工作流程
- 人教版数学二上听评课记录:第3单元 角的初步认识-第2课时 认识直角
- DB65-T 4759-2023 棉秸秆配合颗粒饲料生产技术规程
- 八年级美术下册传统的魅力第7课走进陶瓷世界省公开课一等奖新名师课获奖课件
- DL∕T 1711-2017 电网短期和超短期负荷预测技术规范
- 消防安全制度完整版
- 标准教程HSK5第十三课教案
- 《新能源汽车技术》课件-充电系统结构和工作原理
- 压轴题06向量、复数压轴题16题型(教师版)
- 压轴题02圆锥曲线压轴题17题型 (教师版)
- 《电力变压器有载分接开关机械特性的声纹振动分析法》
- 产品年度质量回顾管理规程
- 医院停水停电应急预案培训
评论
0/150
提交评论