




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java中的IO操作 小 中 大小塔2014-01-06 11:36java热度:2,205 3条评论在使用io操作之前,先看一下java中的文件类File如何使用。File包括文件和目录,对文件和目录的操作是新建目录mkdir,新建文件createNewFile,删除文件和目录delete,以及其他的一些操作。package zaojiahua;import java.io.File;import java.io.IOException;/* 对文件类的操作 */public class Testpublic static void main(String args) throws IOException/新建一个目录File file = new File(1/2);/判断目录是否存在if(!file.exists()/创建多层目录file.mkdirs();/创建文件File file2 = new File(file,1.txt);file2.createNewFile();/创建文件File file3 = new File(2.txt);file3.createNewFile();/获取文件的绝对路径System.out.println(file3.getAbsolutePath();System.out.println(file2.getParent();/删除目录file.delete();File file4 = new File(1/3);/遍历目录中的文件和目录,是单层遍历String str = file4.list();for(String s : str)System.out.println(s);/列出一个目录下的所有文件System.out.println(*listAll*);listAll(file4);static void listAll(File filename)if(filename.isDirectory()File fileDir = filename.listFiles();for(File file : fileDir)if(file.isDirectory()System.out.println(目录:+file);listAll(file);elseSystem.out.println(文件:+file);elseSystem.out.println(文件:+filename);接下来是java中IO类的操作,IO分类如下图所示,这里只说几个常用的。首先是FileInputStream和FileOutputStream,这一对流是对文件进行读写的,读写方法是从父类inputStream和OutputStream继承下来的read和write方法。package com.zaojiahua.iodemo;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Test public static void main(String args) throws IOException File file = new File(file.txt);/实现数据的拷贝FileInputStream inputStream = new FileInputStream(file);FileOutputStream outputStream = new FileOutputStream(1.txt);/int i;/while(i = inputStream.read() ) != -1)/read的返回值是int,如果遇到了文件尾则返回-1/outputStream.write(i);/或者使用如下的方法byte buf = new byte1024;int len = -1;while(len = inputStream.read(buf) != -1)outputStream.write(buf);inputStream.close();outputStream.close();BufferedInputStream对外提供滑动读取的功能实现,通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedInputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。这样的设计的好处是:避免了大量的磁盘IO,因为原始的InputStream类实现的read是即时读取的,即每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),可想而知,如果数据量巨大,这样的磁盘消耗非常可怕。而通过缓冲区的实现,读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘IO,载入一段数据填充缓冲,那么下一次读取一般情况下就直接可以从缓冲区读取,减少了磁盘IO。说白了buffered就是用来缓存的,可以用来提高读取的效率,之所以说FileInputStream是阻塞的方法是因为CUP的速度和磁盘的速度是不匹配的,如果每次要读取的时候都访问磁盘这样就造成了阻塞。通过以上的说明可以看出buffered则并不是阻塞的。所以我们读取文件的时候一般都在文件流上边套上一层buffer流。package com.zaojiahua.iodemo;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Test public static void main(String args) throws IOException File file = new File(file.txt);/使用buffer实现数据的拷贝BufferedInputStream input = new BufferedInputStream(new FileInputStream(file);BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(1.txt);/或者使用如下的方法byte buf = new byte1024;int len = -1;while(len = input.read(buf) != -1)output.write(buf,0,len);/将读取到的字节数据转化为字符串打印出来String str = new String(buf,0,len);System.out.println(str);/关闭流input.close();output.close();数据在硬盘上都是以字节的方式存储的,那么什么时候使用字符流,什么时候使用字节流呢?字符流是对字符操作的,也就是对文本文件或者其他字符文件操作。而对于图片,声音,视频这些文件则用字节流操作。接下来是对字符流的操作,字符流相当于是字节流+编码表。可以向文件中直接写入字符串。读取的时候注意是用字符数组接受,不是字节数组。package com.zaojiahua.iodemo;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test public static void main(String args) throws IOException File file = new File(file.txt);/使用字符流实现文本文件的复制FileReader reader = new FileReader(file);FileWriter writer = new FileWriter(2.txt);int len;/这里是字符数组,不是字节数组char buf = new char1024;while(len = reader.read(buf) != -1)System.out.println(new String(buf,0,len);writer.write(buf,0,len);/可以将字符串直接写到文件中writer.write(rn+end);/关闭流reader.close();writer.close();以下是缓冲的字符流。经过缓冲以后可以读取和写入一行的数据。package com.zaojiahua.iodemo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test public static void main(String args) throws IOException File file = new File(file.txt);/使用字符流实现文本文件的复制BufferedReader bufferedReader = new BufferedReader(new FileReader(file);BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(2.txt);String buf;/使用buffer缓冲的时候可以读取和写入一行while(buf = bufferedReader.readLine() != null)bufferedWriter.write(buf);/写入一行bufferedWriter.newLine();System.out.println(buf);/关闭流bufferedReader.close();bufferedWriter.close();最后解决的一个问题是字节流和字符流的转化,使用的是InputStreamReader和OutputStreamWriter,它们本身属于的是reader和writer字符流,我们之所以会用到这些转化流是因为系统有时候只给我们提供了字节流,为了方便操作,要用到字符流。比如说System.in标准输入流就是字节流。你想从那里得到用户在键盘上的输入,只能是以转换流将它转换为Reader以方便自己的程序读取输入。再比如说Socket里的getInputStream()很明显只给你提供字节流,你要想读取字符,就得给他套个InputStreamReader()用来读取。package com.zaojiahua.iodemo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class Test public static void main(String args) throws IOException /字节流和字符流的相互转化FileInputStream fileInputStream = new FileInputStream(input.txt);/inputSreamReader本来就是reader对象,创建的时候需要传入一个InputStream对象,将字节流转化为字符流BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream);/将字符流转化为字节流OutputStreamWriter outputStreamWr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省无锡市积余中学2025年初三年级8月摸底考试数学试题含解析
- 重庆市江津区2025年初三第五次适应性训练数学试题试卷含解析
- 重庆市重点中学2025年初三下学期期末仿真模拟生物试题含解析
- 互联网时代干部培训策略与实施
- 枣强中学高一上学期第三次月考生物试题
- 目标控制程序培训资料
- 2025租赁合同范本:测量仪器出租合同
- 2025笔记本电脑买卖合同
- 2025财经大学服务合同(教室租赁类)
- 2025年建筑项目基础施工合同范本
- 导线的连接精品课件
- 论提高行政效率的途径 开题报告
- 059.商业计划书和可行性报告精制食油厂年产万吨精制山茶油项目可行性研究报告
- 米度盾构导向系统
- [说明]心血管内科(心内科)_见习教案_6_动脉粥样硬化和冠状动脉粥样硬化性心脏病
- Q∕GDW 11257.3-2020 熔断器技术规范 第3部分:跌落式熔断器
- 汽车焊接夹具设计外文文献翻译
- 浓缩机的选择与计算
- 沪教版六年级下册单词表
- 红星美凯龙租赁合同
- 最新投标书密封条
评论
0/150
提交评论