版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年伊春丰林县招聘事业单位工作人员真题
- 2025年邯郸技师学院招聘教师真题
- 2025年湖南省高速公路集团有限公司招聘考试真题
- 事业单位面试题目及参考答案
- 教师有偿办班及乱购教辅自查报告
- 昌江叉河片区环境综合治理暨绿色循环产业融合示范项目中试研究和产业孵化基地项目环评报告表
- 四川新高考联盟2027届高中毕业班摸底检测语文试题含答案
- 停电初期响应企业IT部门预案
- 关于2026年市场活动物料准备情况催办函5篇范本
- 传统文化继承发扬-小学主题班会课件
- 南充市公安局2026年上半年第二次公开招聘警务辅助人员(20人)笔试参考题库及答案详解
- 消防救援支队公开招聘工作人员笔试试题(含详细答案)
- XX区企业厂界噪声监测报告
- 快速康复外科理念eras与围手术期护理课件
- 装潢材料购买合同范本
- 2026年陕西省中考语文真题
- 2026云南九九彩印有限公司毕业生招聘25人考试备考试题及答案详解
- 鸡苗养殖购买合同
- 2026年供应链管理三级试题及答案
- 漏电保护器安全使用与安装规范培训
- 道路运输企业安全员安全培训记录表
评论
0/150
提交评论