版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
温固而知新,可以为师矣第3页共4页Java的输入输出流操作手册1 IOAPI1.1 类文件字符流输入流FileReaderBufferedReader输出流FileWriterBufferedWriterPrintWriter字节流输入流FileInputStreamBufferedInputStreamDataInputStream输出流FileOutputStreamBufferedOutputStreamPrintStreamDataOutputStream字符字节通用流输入流InputStreamReader输出流OutputStreamWriter 在数据流操作过程中通过缓冲区能大大提高I/O性能,采用数据缓冲区只需将输入与输出流用Buffered*封装一次即可1.2 类说明FileOutputStream 用于写入诸如图像、文件数据之类的原始字节的流FileInputStream 用于读取诸如图像、文件数据之类的原始字节流DataOutputStream 写入java基本类型数据字节流(也可写入文件数据),readUTF方法用于读取用UTF-8修改版格式编码的字节流DataInputStream 读写由DataOutputStream写入的java的基本类型的方法,如readInt,readLong,writeUTF方法采用平台无关方式的UTF-8修改版编码写入字节流Buffered* 能够在内存里建立一个缓冲数据区,当写文件的时候,能起到缓冲的作 用,并且可以自定缓冲区大小,BufferedOutputStream(OutputStream
out,int
size)InputStreamReader 是从字节流到字符流的桥梁:它读入字节,并根据指定字符编码方式,将之转换为字符流显示。使用的编码方式可能由名称指定,如InputStreamReader(InputStream
in,String
charsetName),charsetName就是用于指定字符编码方式的OutputStreamWriter 是字符流通向字节流的桥梁:使用指定的编码方式将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集OutputStreamWriter (OutputStream
out,String
charsetName)charsetName用于指定字符编码方式的,不指定则接受平台默认字符集PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形 式。与其他输出流不同,PrintStream不会抛出IOException;而是,异常情况仅设置可通过checkError方法测试的内部标志。另外,为了自 动刷新,可以创建一个PrintStream;这意味着可在写入字节数组之后自动调用flush方法。PrintStream打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用PrintWriter类。PrintWriter 将格式化对象打印到一个文本的输出流。此类实现在PrintStream中的所有print方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。此类中的方法不会抛出I/O异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用checkError()是否出现错误2 字节流与字符流在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的2.1 Java字符流1、一个字符一个字符的读取或写入2、一个字符可以是1个字节,可以是2个或多个字节;但java字符流处理的单元为2个字节的Unicode字符3、java字符流分别操作字符、字符数组或字符串2.2 Java字节流1、一个字节一个子节的读取或写入2、Java字节流处理单元为1个字节3、Java操作字节和字节数组4、字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据。5、由于中文最少占二个字节,如果此时只读一个字节显然中文显示失败,此时提出了字符流的概念,它是按虚拟机的编码来处理,也就是要进行字符集的转化。2.3 字节流与字符流转换1、字节流与字符流之间通过InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String的关联。2、字节流转向字符流实际上如publicString(bytebytes[],StringcharsetName)3、字符流转向字节流采用String.getBytes()3 输入流操作(从文件读取)3.1 一次性读取所有内容FileInputStreaminput=newFileInputStream("d://test.java"); inttotal=input.available(); //返回test.java文件中字节的总长度byte[]readInfo=newbyte[total]; //定义文件总长度相同大小的数组去存放数据input.read(readInfo); //读取文件并存入数组readInfo中Stringexport=newString(readInfo); //将数组信息字符串化input.close();3.2 逐行读取内容用readLine行读取(采用BufferedReader封装)FileReaderread=newFileReader(newFile("f://test.txt"));BufferedReaderbf=newBufferedReader(read);//封装Strings=bf.readLine();//读文件信息一行while(s!=null){//如果读到为空说明读结输入流完毕 s=bf.readLine();//继续读取下一行 }3.3 读取输入信息用read[byte[]b]数组参看当前目录下《IO测试Demo.java》示例。示例包括用byte进行读、存包含一次性读取所有内容、一次性存储所有内容到文件3、系统输入的信息读取(主要部分代码)BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in))StringstringReader=null;stringReader=reader.readLine().trim();//trim()用于转换成大写4 输出流操作(输出到文件)4.1 存储指定字符内容到指定文件Stringexport="";Filefile=newFile("d:\\DownloadCert.log");FileOutputStreamoutput=newFileOutputStream(file); output.write(export.getBytes()); output.close();注:4.2 逐行读取指定文件存储至另一文件//输入流FileReaderread=newFileReader(newFile("f:\\"+"test.txt"));BufferedReaderbf=newBufferedReader(read);//输出流1,方法一Filefile=newFile("d:\\"+"DownloadCert.log");FileOutputStreamfileWriter=newFileOutputStream(file,true);Strings=bf.readLine();//读文件信息一行while(s!=null){//如果读到为空说明读结输入流完毕s=s+"\n";//将读到的信息组合起来并插入分行符fileWriter.write(s.getBytes());s=bf.readLine();//继续读取下一行}//输出流2,方法二Filefile=newFile("d:\\"+"DownloadCert.log");FileWriterf=newFileWriter(file);//或FileWriterf=newFileWriter(file,true);PrintWriterp=newPrintWriter(f);Strings=bf.readLine();//读文件信息一行while(s!=null){ //如果读到为空说明读结输入流完毕p.println(); //增加分行p.write(s);s=bf.readLine();//继续读取下一行}4.3 限制每次读取长度读取指定文件至另一文件/*边读边存文件,如果文件或数据过大则采用字节限制读、存*/ FileInputStreaminput_1=newFileInputStream("d://Base64.java");FileOutputStreamoutput_1=newFileOutputStream("d://temp_1.txt"); byteb[]=newbyte[400]; //定义长度为400的字节数组,每次只读400字节intrs=0;while(rs!=-1){ intsize=input_1.available(); //起初为文件总长度,随着每read一次长度自动减少一些/如果文件或数据小于400长度if(size<b.length){byte[]end=newbyte[size];rs=input_1.read(end);System.out.println("读取到"+rs+"字符");output_1.write(end);rs=-1;//读、存结束,设置-1去终止循环}else{//如果文件或数据大于400长度rs=input_1.read(b); //从文件中读取出400字符存入数组b中System.out.println("读取到"+rs+"字符");output_1.write(b); //将长度为400的数组b写到另一文件}} input_1.close(); output_1.close(); 4.4 读取网页数据到文件中URLurlAdress=null;BufferedReaderbuffReader=null;//输入流PrintWriterexport=null;//输出流try{urlAdress=newURL("一个指数网址");}catch(MalformedURLExceptione){//捕捉URL不存在}try{ //打开到此URL的连接并返回一个用于从该连接读入的InputStream InputStreaminputStream=urlAdress.openStream(); InputStreamReaderinputReader=newInputStreamReader(inputStream); buffReader=newBufferedReader(inputReader);//接下来BufferedReader可以逐行读取了 /*通过BufferedWriter中转指定目标文件 *FileWriteroutFile=newFileWriter("d:/temp.html");//输出流目标文件 *BufferedWriterbuffWriter=newBufferedWriter(outFile);//接受FileWriter类型参数 *export=newPrintWriter(buffWriter); */ export=newPrintWriter("d:/temp.html");//构造参数中直接指定目标文件 /*输入输出流操作*/ StringstrHtml=buffReader.readLine();//读取一行 while(strHtml!=null){//如果读取到信息则执行此块 export.println(strHtml);//存储一行 strHtml=buffReader.readLine();//重新读取下一行 } }catch(IOExceptione){ }finally{ try{ if(buffReader!=null) buffReader.close(); if(export!=null) export.close(); }catch(Exceptione){}}5 System的输入/输出流常量:publicstaticfinalInputStreamin“标准”输入流。该流已打开并且准备接受输入数据。典型情况是该流同键盘输入或主机环境或用户指定的另一个输入源相联系。publicstaticfinalPrintStreamout“标准”输出流。该流已打开并且准备接受输出数据。典型情况是该流同显示输出或由主机环境或用户指定的另一个输出目标相联系。publicstaticfinalPrintStreamerr“标准”错误输出流。该流已打开并且准备接受输出数据。典型情况是该流同显示输出或由主机环境或用户指定的另一个输出目标相联系。通过约定,该输出流用来显示出错信息或其它应立即引起用户注意的信息,即使是主输出流也应该如此,变量out的值已被重定向到一个文件或其它典型的未连续监视的目标上。常用方法:publicstaticvoidsetIn(InputStreamin)重新分配“标准”输入流。publicstaticvoidsetOut(PrintStreamout)重新分配“标准”输出流。publicstaticvoidsetErr(PrintStreamerr)重新分配“标准”错误输出流。注:out与err区别1、out与err都可以向控制台输出2、out具有缓冲,err无缓冲。举例:System.out.println(“11”);System.err.println(…..);If(){……代码块}System.out.println(“22”);System.err.println(…..);如上情况。由于out具有缓冲,也就是当执行到System.out.println(“11”)时它可能暂时缓冲下,并不向外输出,可能等执行完If(){……代码块}后再输出。最终out都能输出,且各out输出顺序不变。而err是执行到就立即输出,作为错误提醒,并不缓冲,常用来调试代码6 压缩文件的I/O操作除了文件的流操作外,有时还需进行zip等压缩文件流操作。如果对压缩文件采用通用的输入/输出流操作将大大影响效率,以下介绍如何使用压缩流操作压缩文件InputStreamin=null;try{ in=newFileInputStream(newFile("d:\\1.zip")); Stringfile="d:\\2.zip"; FileOutputStreamtoFile=newFileOutputStream(file); ZipOutputStreamout=newZipOutputStream(toFile); //设置用于后续条目的默认压缩方法 out.setMethod(ZipOutputStream.DEFLATED); //创建一个zip入口,ZipEntry构造方法只接受string类型参数 ZipEntryzipentry=newZipEntry(file); //添加zip入口到压缩输出流 out.putNextEntry(zipentry); //设定一个指定长度的字节数组。 byte[]rgb=newbyte[1000]; while(true){ //从输入流中将最多rgb.length个字节的数据读入rgb数组中。 intdata=in.read(rgb); if(data==-1){ break; } //rgb为要写入的数据,0为数据中的初始偏移量,data为要写入的字节数 out.write(rgb,0,data); }}catch(IOExceptione){...}packagecom;=============IO测试DEMO=======================importjava.io.*;publicclassIOtest{ publicstaticvoidmain(String[]args){ IOtesttest=newIOtest(); test.stream(); } publicvoidstream(){ try{ /*单独读取文件,无字节限制的一次性读取*/ FileInputStreaminput=newFileInputStream("d://test.java"); inttotal=input.available(); //返回test.java文件中字节的总长度 byte[]readInfo=newbyte[total]; //定义文件总长度相同大小的数组去存放数据 input.read(readInfo); //读取文件并存入数组readInfo中 Stringexport=newString(readInfo); //将数组信息字符串化 //System.out.println(export); input.close(); /*单独存储文件,无字节限制的一次性存储*/ FileOutputStreamoutput=newFileOutputStream("d://temp.txt"); output.write(export.getBytes()); //使用默认平台字符集将String解码为字节序列存入文件 output.close(); /*边读边存文件,如果文件或数据过大则采用字节限制读、存*/ FileInputStreaminput_1=newFileInputStream("d://Base64.java"); FileOutputStreamoutput_1=newFileOutputStream("d://temp_1.txt"); byteb[]=newbyte[400]; //定义长度为400的字节数组 intrs=0; while(rs!=-1){ intsize=input_1.available(); //起初为文件总长度,随着每read一次长度自动减少一些//如果文件或数据小于400长度if(size<b.length){ byte[]end=newbyte[size];rs=input_1.read(end);System.out.println("读取到"+rs+"字符");output_1.write(end);rs=-1;//读、存结束,设置-1去终止循环}//如果文件或数据大于400长度else{ rs=input_1.read(b); //从文件中读取出400字符存入数组b中 System.out.println("读取到"+rs+"字符"); output_1.write(b); //将长度为400的数组b写到文件}} input_1.close(); output_1.close(); }catch(IOExceptione){ e.printStackTrace(); } }}===========读取网页内容=====================packagecom;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.PrintWriter;import.MalformedURLException;import.URL;//网页数据采据publicclassURLtest{ publicstaticvoidmain(String[]args){ URLtesttest=newURLtest(); test.store(); } publicv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版美容院会员积分体系合作协议4篇
- 2025年度教育培训机构课程开发及师资培训合同4篇
- 2025年成都美食研发上灶师父招聘与新品开发合同2篇
- 三方产品销售合同范本(2024版)
- 二零二五年度商业地产租赁收益权转让合同3篇
- 2025年度智慧农业项目采购合同解除协议2篇
- 二零二五年度钢管车辆运输合同车辆保险理赔与费用结算合同3篇
- 2025版动漫主题咖啡厅经营管理协议3篇
- 二零二五年度车辆抵押抵押权转让合同范本3篇
- 2025年生态园区委托物业管理合同范本3篇
- 《天润乳业营运能力及风险管理问题及完善对策(7900字论文)》
- 医院医学伦理委员会章程
- xx单位政务云商用密码应用方案V2.0
- 农民专业合作社财务报表(三张报表)
- 动土作业专项安全培训考试试题(带答案)
- 大学生就业指导(高职就业指导课程 )全套教学课件
- 死亡病例讨论总结分析
- 第二章 会展的产生与发展
- 空域规划与管理V2.0
- JGT266-2011 泡沫混凝土标准规范
- 商户用电申请表
评论
0/150
提交评论