版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章
输入输出操作01020310.1流的概念10.2File类10.3思考和练习数据流是一组有序,有起点和终点的字节集合。Java中将读取数据的对象称为输入流,写入数据对象称为输出流。Java中流分为两种:一种是字节流,一种是字符流。字节流是基于二进制字节的输入输出,字节流中数据以8位字节为单位进行读写。InputStream类和OutputStream类是字节流的父类。字符流是基于文本的输入输出,是由能够阅读的字符组成,字符流中数据以16位字符为单位进行读写。Reader类和Writer类是字符流类的父类。InputStream类和OutputStream类、Reader类和Writer类都是抽象类。10.1.1流的含义10.1流的概念310.1流的概念字节流中InputStream类和OutputStream类的层级结构如下:OutputStream输出流ByteArrayOutputStream字节数组输出流FileOutputStream文件输出流FilterOutputStream过滤器输出流BufferOutputStream带缓冲区输出流PrintOutputStream回退输出流DataOutputStream数据输出流PipedOutputStream管道输出流ObjectOutputStream对象输出流Reader类和Writer类的层级结构如下:ReaderBufferReaderLineNumberReaderCharArrayReaderInputStreamReaderFileReaderFilterReaderPushbackReaderPipedReaderStringReader10.1流的概念510.1流的概念WriterBufferWriterCharArrayWriterOutputStreamWriterFileWriterFilterWriterPipedWriterStringWriterSystem.in:标准输入流System.out:标准输出流System.err:标准错误输出流10.1.3标准输入输出流10.1流的概念10.2File类10.2.1File类的构造方法File类与InputStream类和OutputStream类是一个系统包。File类主要目的是命令文件、查询文件属性和处理文件目录,不涉及到访问文件内容。File类的构造方法有如下几种:(1)publicFile(Stringname):定义name打开的文件,name可以包含路径信息。例如:Filef1=newFile("F:\\file\\123.txt");(2)publicFile(Stringpathname,Stringname):路径和文件名分开定义,pathname是绝对路径名或者相对路径名,name是文件名。例如:Filef1=newFile("F:\\file","123.txt");(3)publicFile(Filedirectory,Stringname):使用File对象directory定义的目录来打开name文件。例如:FileDir=newFile("F:\\file");Filef1=newFile(Dir,"123.txt");10.2File类10.2.2FileInputStream类和FileOutputStream类FileInputStream类是InputStream类的子类,FileOutputStream类是FileOutputStream类子类。二者都是抽象类,不能直接定义对象,必须通过其子类进行实现。FileInputStream类处理文件数据的输入数据流,从文件系统中读取输入的字节数。分为三个步骤:(1)打开输入流(2)使用read()方法读取数据(3)关闭数据流FileOutputStream类处理文件数据的输出数据流。也是分为三个步骤:(1)打开输出流(2)使用write()方法写数据(3)关闭数据流910.2File类packagetest;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;publicclassclass1{ publicstaticvoidmain(Stringargs[]){StringFilename_in="G:\\file\\first.txt";//注意文件路径的双斜杠StringFilename_out="G:\\file\\second.txt";//注意文件路径的双斜杠try{FileInputStreamf_in=newFileInputStream(Filename_in);FileOutputStreamf_out=newFileOutputStream(Filename_out);intn=16,count;bytebuffer[]=newbyte[n];while(((count=f_in.read(buffer,0,n))!=-1)&&(n>0)){f_out.write(buffer,0,count); }System.out.println();f_in.close();f_out.close(); }catch(IOExceptionio_err){System.out.println(io_err);}catch(Exceptionerr){System.out.println(err);}} }程序运行前,给G:\file\first.txt文件中输入一些数据,保持G:\file\second.txt文件为空。程序运行后,G:\file\second.txt文件中的数据与G:\file\first.txt文件中的数据相同。10.2File类10.2File类10.2.3DataInputStream类和DataOutputStream类DataInputStream类是InputStream类的子类,DataOutputStream类是FileOutputStream类子类。二者都是抽象类,不能直接定义对象,必须通过其子类进行实现。1210.2File类DataInputStream函数列表DataInputStream(InputStreamin)finalintread(byte[]buffer,intoffset,intlength)finalintread(byte[]buffer)finalbooleanreadBoolean()finalbytereadByte()finalcharreadChar()finaldoublereadDouble()finalfloatreadFloat()finalvoidreadFully(byte[]dst)finalvoidreadFully(byte[]dst,intoffset,intbyteCount)finalintreadInt()finalStringreadLine()finallongreadLong()finalshortreadShort()finalstaticStringreadUTF(DataInputin)finalStringreadUTF()finalintreadUnsignedByte()finalintreadUnsignedShort()finalintskipBytes(intcount)1310.2File类importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有异常抛出Stringname="李先生";intage=55;Stringemail="123456789@";Stringphone="123456789";//输入输出流FileOutputStreamfos=null;FileInputStreamfis=null;DataOutputStreamdos=null;DataInputStreamdis=null;try{try{//生成新文件textfos=newFileOutputStream("g:\\text.txt");dos=newDataOutputStream(fos);//将数据输出到text中
dos.writeUTF(name);dos.writeInt(age);dos.writeUTF(email);dos.writeUTF(phone);//输入text中的数据fis=newFileInputStream("g:\\user.txt");dis=newDataInputStream(fis);Stringm_Name=dis.readUTF();intm_Age=dis.readInt();Stringm_Eamil=dis.readUTF();Stringm_Phone=dis.readUTF();System.out.println("姓名:"+m_Name+";年龄:"+m_Age+";邮箱:"+m_Eamil+";电话:"+m_Phone); }catch(FileNotFoundExceptione){e.printStackTrace(); }catch(IOExceptione){e.printStackTrace(); }10.2File类1510.2File类}finally{try{fos.close();fis.close();dos.close();dis.close();}catch(IOExceptione){e.printStackTrace(); }}}}程序运行结果:姓名:李先生;年龄:55;邮箱:123456789@;电话:123456789readUTF()的作用,是从输入流中读取UTF-8编码的数据,并以String字符串的形式返回。RandomAccessFile是用来访问那些保存数据记录的文件,可以用seek()方法来访问记录,并进行读写。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。10.2.4随机访问文件10.2File类1710.2File类importjava.io.RandomAccessFile;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有异常抛出RandomAccessFilerf=newRandomAccessFile("g:\\file\\test.dat","rw");for(inti=0;i<10;i++){//写入基本类型double数据rf.writeDouble(i*25);}rf.close();rf=newRandomAccessFile("g:\\file\\test.dat","rw");//直接将文件指针移到第5个double数据后面rf.seek(5*8);//覆盖第6个double数据rf.writeDouble(123.5678);rf.close();rf=newRandomAccessFile("g:\\file\\test.dat","r");for(inti=0;i<10;i++){System.out.println("Value"+i+":"+rf.readDouble());}rf.close();}}10.2File类程序运行结果:Value0:0.0Value1:25.0Value2:50.0Value3:75.0Value4:100.0Value5:123.5678Value6:150.0Value7:175.0Value8:200.0Value9:225.0RandomAccessFile是用来访问那些保存数据记录的文件,可以用seek()方法来访问记录,并进行读写。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。(1)BufferedReader类所属类库:java.lang.Objectjava.io.Readerjava.io.BufferedReader基本概念:publicclassBufferedReaderextendsReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值足够大。10.2.5Read类和Write类10.2File类2010.2File类importjava.io.*;classBufferedReaderDemo{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));System.out.print("请输入一系列文字,可包括空格:");Stringtext=bufferedReader.readLine();System.out.println("请输入文字:"+text);}}throwsIOException抛出异常,InputStreamReader是字节流通向字符流的桥梁。程序运行结果(斜体字是自己输入):请输入一系列文字,可包括空格:这是BufferedReader程序测试请输入文字:这是BufferedReader程序测试10.2File类(2)InputStreamReader类InputStreamReader将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
构造方法:
InputStreamReaderisr=newInputStreamReader(InputStreamin);//构造一个默认编码集的InputStreamReader类InputStreamReaderisr=newInputStreamReader(InputStreamin,StringcharsetName);//构造一个指定编码集的InputStreamReader类。主要方法:intread();//读取单个字符。intread(char[]cbuf);//将读取到的字符存到数组中。返回读取的字符数。2210.2File类importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有异常抛出 /***没有缓冲区,只能使用read()方法。*///读取字节流//InputStreamin=System.in;//读取键盘的输入。InputStreamin=newFileInputStream("g:\\file\\first.txt");//读取文件的数据。//将字节流向字符流的转换。要启用从字节到字符的有效转换,//可以提前从底层流读取更多的字节.InputStreamReaderisr=newInputStreamReader(in);//读取//综合到一句。//InputStreamReaderisr=newInputStreamReader(//newFileInputStream("g:\\file\\first.txt"));char[]cha=newchar[1024];intlen=isr.read(cha);System.out.println(newString(cha,0,len));isr.close();}}10.2File类程序运行结果序号
名称
型号
价格1 三星手机 SA1203 3000.002 华为手机 HW3001 5000.00苹果手机 A2503 4500.00当然,输出就是g:\file\first.txt文件中的内容。2410.2File类(3)InputStreamReader、BufferedReader真实案例(非编码集)importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;publicclassc1{publicstaticvoidmain(String[]args)throwsException{//所有异常抛出try{//读取文件,并且以utf-8的形式写出去BufferedReaderbufread;InputStreamReaderinputSteam=newInputStreamReader( ResourceHelper.getResourceInputStream("g:\\file\\first.txt"));Stringread;bufread=newBufferedReader(inputSteam);while((read=bufread.readLine())!=null){System.out.println(read);}bufread.close();}catch(FileNotFoundExceptionex){ex.printStackTrace();}catch(IOExceptionex){ex.printStackTrace();}}}10.2File类classResourceHelper{/***@param
resourceName*@return*@return*/staticBufferedInputStream
getResourceInputStream(StringresourceName){try{returnnewBufferedInputStream(newFileInputStream(resourceName));}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblock
e.printStackTrace();}returnnull;}}程序运行结果序号
名称
型号
价格1 三星手机 SA1203 3000.002 华为手机 HW3001 5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45015-2024钛石膏综合利用技术规范
- 2024年广东省普通高等学校招收中等职业学校毕业生统一模拟考试语文题真题(原卷版)
- 卡斯钦-贝克病的健康宣教
- 干呕的健康宣教
- 足趾痛的健康宣教
- 毛孔堵塞的临床护理
- 子宫炎的健康宣教
- 孕期积食的健康宣教
- 《第一章》课件-1.1人工智能的诞生
- 皮肤脓肿的临床护理
- 【MOOC】电子技术实验-北京科技大学 中国大学慕课MOOC答案
- 无机及分析化学考试题(附答案)
- 原子核物理(卢希庭)课后习题答案全课件
- 2022年沧州市金融控股有限公司招聘笔试题库及答案解析
- 新《双眼视觉学》考试复习题库(含答案)
- 心理健康教育主题班会(29张)课件
- 霍尔与无刷电机正反转控制笔记
- 参展商实务(第三版)第二章企业参展相关程序
- 在全市母婴安全形势分析会上的讲话
- 文华财经程序化交易初级篇
- 羽毛球运动的教学理论与方法
评论
0/150
提交评论