版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java
I/OLearnmore.
I/O操作的相似性输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。这些操作都有相似性,如:控制台(console,)
打印/读入文件(file)
读/写我们已经知道了如何从控制台输入输出数据,今天就学习下如何从文件中输入输出数据.File类File类File类是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容。File类定义了一些与平台无关的方法来操纵文件,例如,创建、删除文件和重命名文件。Java中的目录被当作一种特殊的文件使用,list方法可以返回目录中的所有子目录和文件名。在Unix下的路径分隔符为(/),在Dos下的路径分隔符为(\),Java可以正确处理Unix和Dos的路径分隔符。File类常用方法课堂练习判断本机上的某个文件是否存在。如果存在则输出文件大小,如果不存在则创建。publicstaticvoidmain(String[]args){ Filef=newFile("D:/Test.txt"); if(f.exists()){ System.out.println(f.length()); }else{ try{ f.createNewFile(); }catch(IOExceptione){
e.printStackTrace(); } } }
流的抽象Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。InputStreamReader什么是流流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。数据源程序读出数据流目的程序写入数据流流的重要特性顺序读/写sequentiallyJavaI/O流的分类java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:按数据流的方向不同可以分为输入流和输出流。按处理数据单位不同可以分为字节流和字符流。按照功能不同可以分为节点流和处理流。JDk所提供的所有流类型位于包java.io内,都分别继承自一下四种抽象流接口。字节流字符流输入流InputStreamReader输出流OutputStreamWriter字节流和字符流字节流(bytestream):一个字节(8-bit)一个字节读/写字符流(characterstream):一个字符一个字符读/写(具有特定字符编码的数据)InputStream继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。InputStream基本方法publicabstractintread()throwsIOException读取一个字节并以整数的形式返回(0~255),如果返回-1表示到达输入流的结尾publicintread(byte[]buffer)throwsIOException读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,到末尾返回-1publiclongskip(longn)throwsIOException跳过n个字节不读,返回实际跳过的字节数publicvoidclose()throwsIOException关闭流释放内存资源流的读入过程读(Reading)openastream//打开读出流whilemoreinformation//判断readinformation//读closethestream//关闭流读入流/字节流实例publicstaticvoidmain(Stringargs[]){InputStreamin=System.in;intb;try{ while((b=in.read())!=-1){ System.out.print(b+“”);} in.close();}catch(IOExceptione){
e.printStackTrace();}System.out.println();}}文件处理类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。示例:OutputStream继承自OutputStream的流都是用于程序中输出数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。OutputStream基本方法publicabstractvoidwrite(intb)throwsIOException向输出流中写入一个字节数据,该字节数据为参数b的低8位publicvoidwrite(byte[]data)throwsIOException将一个字节类型的数组中的数据写入输出流publicvoidclose()throwsIOException关闭流释放内存资源publicvoidflush()throwsIOException将输出流中缓冲的数据全部写出到目的地流的写出过程写(Writing)openastream//打开写入流whilemoreinformation//判断writeinformation//写closethestream//关闭流流的写出过程Filef=newFile("D:"+File.separator+"test.txt");//如果文件不存在会自动创建OutputStreamout=newFileOutputStream(f);//OutputStreamout=newFileOutputStream(f,true);//追加内容Stringstr="HelloWorld";byte[]b=str.getBytes();//因为是字节流,所以要转化成字节数组进行输出out.write(b);out.close();字符流Reader继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(2个字节);下图中深色为节点流,浅色为处理流Reader基本方法publicintread()throwsIOExceptionpublicintread(char[]text)throwsIOExceptionpubliclongskip(longn)throwsIOExceptionpublicvoidclose()throwsIOExceptionReader使用示例publicstaticvoidmain(String[]args)throwsIOException{ Filef=newFile("D:"+File.separator+"text.java"); Readerinput=newFileReader(f); intb=0; while((b=input.read())!=-1){ System.out.println((char)b); } input.close(); }字符流Writer继承自Writer的流都是用于程序输出数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流Writer基本方法publicvoidwrite(intc)throwsIOExceptionpublicvoidwrite(char[]text)throwsIOExceptionpublicvoidwrite(Stringstring)throwsIOExceptionpublicvoidflush(char[]text)throwsIOExceptionpublicvoidclose(char[]text)throwsIOExceptionWriter使用示例publicstaticvoidmain(String[]args)throwsIOException{ Filefile=newFile("D:/text.java"); Writerw=newFileWriter(file); Stringstr="测试"; w.write(str); w.close();}节点流和处理流节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。节点流和处理流按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。常用的节点流父类InputStreamOutputStreamReaderWriter对文件进行处理的节点流FileInputStreamFileOutputStreanFileReaderFileWriter常用的处理流父类InputStreamOutputStreamReaderWriter缓冲流BufferedInputStreanBufferedOutputStreamBufferedReaderBufferedWriter需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法。转换流InputStreamReaderOutputStreamWriter-要inputStream或OutputStream作为参数,实现从字节流到字符流的转换通过处理流读数据到程序1.创造一个字符流/节点流,直接操作文件Readerin=newFileReader("G:/Book1.csv");2.在节点流的基础上,套一个缓冲流,实现缓冲和按行读取BufferedReaderreader=newBufferedReader(in);3.读取Stringline=null;while((line=reader.readLine())!=null){...}4.关闭流,有两种方式1)可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法2)关闭原则:先打开的后关闭,后打开的先关闭。否则会抛出异常通过处理流写数据到文件1.创造一个字符流/节点流,直接操作文件Writerout=newFileWriter("G:/Book2.csv");2.在节点流的基础上,套一个缓冲流,实现缓冲BufferedWriterwriter=newBufferedWriter(out);3.写入writer.write("ddddd");换行的方法是writer.newLine();4.写完之后,关闭之前,必须flush!writer.flush();5.关闭流,有两种方式1.可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法2.关闭原则:先打开的后关闭,后打开的先关闭。否则会抛出异常中文乱码的解决方案1.创造一个节点流/字节流,直接操作文件InputStreamfile=newFileInputStream("G:/Book1.csv");2.按照指定编码从字节流转化为字符流InputStreamReaderin=newInputStreamReader(file,"GBK");3.在节点流的基础上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位财会岗面试易错题题库试卷及参考答案
- 2027年备考会计基础 【零基础学员必练】考前冲刺试题卷含答案
- 2026年湖南工业职业技术学院高职单招笔试化学历年参考题库含答案解析
- 2026年温州职业技术学院高职单招笔试物理历年参考题库含答案解析
- 2026年浙江东方职业技术学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年河南林业职业学院高职单招笔试英语历年参考题库含答案解析
- 2026年河北艺术职业学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年江西软件职业技术大学高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年江西旅游商贸职业学院高职单招笔试英语历年参考题库含答案解析
- 2026年江西卫生职业学院高职单招笔试英语历年参考题库含答案解析
- 2026年新教材统编版九年级上册语文期末复习:古诗词理解性默写 专项测试卷(含答案)
- YMO数学竞赛2024秋季七年级复赛真题试卷含答案解析可打印
- T8联考2027届高三10月检测训练英语试题(含答案详解)
- 武汉产业投资控股集团有限公司招聘笔试题库2026
- ISO 9001-2026 换版深度解读:36条条款逐条对比与企业换版行动指南
- 人教版五年级上册语文第七单元第22课《白鹭》第2课时教学课件(新教材)
- 26新五(上)语文课后生字词情景默写
- 关于学生思想政治教育问题的调研报告2026(3篇)
- 九年级物理上册《改变世界的热机》单元复习教学设计(教科版2024)
- 2026-2030中国甲醛市场前景预判与供需平衡状况监测研究报告
- 成品油经营单位安全管理规范与实践
评论
0/150
提交评论