转载:http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.html 
  所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写
其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后)
对于文件内容的操作主要分为两大类
分别是:
  字符流
  字节流
其中,字符流有两个抽象类:Writer ,Reader
其对应子类FileWriter和FileReader可实现文件的读写操作
BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率
 
同样,字节流也有两个抽象类:InputStream   OutputStream
其对应子类有FileInputStream和FileOutputStream实现文件读写
BufferedInputStream和BufferedOutputStream提供缓冲区功能
 
俺当初学IO的时候犯了不少迷糊,网上有些代码也无法通过编译,甚至风格都很大不同,所以新手请注意:       
        1.本文代码较长,不该省略的都没省略,主要是因为作为一个新手需要养成良好的代码编写习惯
   2.本文在linux下编译,类似于File.pathSeparator和File.separator这种表示方法是出于跨平台性和健壮性考虑
   3.代码中有些操作有多种执行方式,我采用了方式1...方式2...的表述,只需轻轻解开注释便可编译
   4.代码中并没有在主方法上抛出异常,而是分别捕捉,造成代码过长,如果仅是测试,或者不想有好的编程习惯,那你就随便抛吧……
        5.功能类似的地方就没有重复写注释了,如果新手看不懂下面的代码,那肯定是上面的没有理解清楚
字符流
实例1:字符流的写入
  1. import java.io.File; 
  2. import java.io.FileWriter; 
  3. import java.io.IOException; 
  4.   
  5. public class Demo { 
  6.     public static void main(String[] args ) { 
  7.           
  8.         //创建要操作的文件路径和名称 
  9.         //其中,File.separator表示系统相关的分隔符,Linux下为:/  Windows下为:\\ 
  10.         String path = File.separator + "home" + File.separator + "siu" +  
  11.                       File.separator + "work" + File.separator + "demo.txt"; 
  12.       
  13.         //由于IO操作会抛出异常,因此在try语句块的外部定义FileWriter的引用 
  14.         FileWriter w = null; 
  15.         try { 
  16.             //以path为路径创建一个新的FileWriter对象 
  17.             //如果需要追加数据,而不是覆盖,则使用FileWriter(path,true)构造方法 
  18.             w = new FileWriter(path); 
  19.               
  20.             //将字符串写入到流中,\r\n表示换行想有好的 
  21.             w.write("Nerxious is a good boy\r\n"); 
  22.             //如果想马上看到写入效果,则需要调用w.flush()方法 
  23.             w.flush(); 
  24.         } catch (IOException e) { 
  25.             e.printStackTrace(); 
  26.         } finally { 
  27.             //如果前面发生异常,那么是无法产生w对象的  
  28.             //因此要做出判断,以免发生空指针异常 
  29.             if(w != null) { 
  30.                 try { 
  31.                     //关闭流资源,需要再次捕捉异常 
  32.                     w.close(); 
  33.                 } catch (IOException e) { 
  34.                     e.printStackTrace(); 
  35.                 } 
  36.             } 
  37.         } 
  38.     } 
编译之后,在目录下面生成文件,并写入字符串
实例2:字符流的读取
  1. import java.io.File; 
  2. import java.io.FileReader; 
  3. import java.io.IOException; 
  4.   
  5. public class Demo2 { 
  6.     public static void main(String[] args ) { 
  7.         String path = File.separator + "home" + File.separator + "siu" +  
  8.                       File.separator + "work" + File.separator + "demo.txt"; 
  9.   
  10.         FileReader r = null; 
  11.         try { 
  12.             r = new FileReader(path); 
  13.               
  14.             //方式一:读取单个字符的方式 
  15.             //每读取一次,向下移动一个字符单位 
  16.             int temp1 = r.read(); 
  17.             System.out.println((char)temp1); 
  18.             int temp2 = r.read(); 
  19.             System.out.println((char)temp2); 
  20.                           
  21.             //方式二:循环读取 
  22.             //read()方法读到文件末尾会返回-1 
  23.             /* 
  24.             while (true) { 
  25.                 int temp = r.read(); 
  26.                 if (temp == -1) { 
  27.                     break; 
  28.                 } 
  29.                 System.out.print((char)temp); 
  30.             } 
  31.             */ 
  32.               
  33.             //方式三:循环读取的简化操作 
  34.             //单个字符读取,当temp不等于-1的时候打印字符 
  35.             /*int temp = 0; 
  36.             while ((temp = r.read()) != -1) { 
  37.                 System.out.print((char)temp); 
  38.             } 
  39.             */ 
  40.               
  41.             //方式四:读入到字符数组 
  42.             /* 
  43.             char[] buf = new char[1024]; 
  44.             int temp = r.read(buf); 
  45.             //将数组转化为字符串打印,后面参数的意思是 
  46.             //如果字符数组未满,转化成字符串打印后尾部也许会出现其他字符 
  47.             //因此,读取的字符有多少个,就转化多少为字符串 
  48.             System.out.println(new String(buf,0,temp)); 
  49.             */ 
  50.               
  51.             //方式五:读入到字符数组的优化 
  52.             //由于有时候文件太大,无法确定需要定义的数组大小 
  53.             //因此一般定义数组长度为1024,采用循环的方式读入 
  54.             /* 
  55.             char[] buf = new char[1024]; 
  56.             int temp = 0; 
  57.             while((temp = r.read(buf)) != -1) { 
  58.                 System.out.print(new String(buf,0,temp)); 
  59.             } 
  60.             */ 
  61.               
  62.         } catch (IOException e) { 
  63.             e.printStackTrace(); 
  64.         } finally { 
  65.             if(r != null) { 
  66.                 try { 
  67.                     r.close(); 
  68.                 } catch (IOException e) { 
  69.                     e.printStackTrace(); 
  70.                 } 
  71.             } 
  72.         } 
  73.     } 
编译之后的效果:
实例3:文本文件的复制
  1. import java.io.File; 
  2. import java.io.FileReader; 
  3. import java.io.FileWriter; 
  4. import java.io.IOException; 
  5.   
  6. public class Demo { 
  7.     public static void main(String[] args ) { 
  8.           
  9.         String doc = File.separator + "home" + File.separator + "siu" +  
  10.                       File.separator + "work" + File.separator + "demo.txt"; 
  11.           
  12.         String copy = File.separator + "home" + File.separator + "siu" +  
  13.                      File.separator + "life" + File.separator + "lrc.txt"; 
  14.   
  15.         FileReader r = null; 
  16.         FileWriter w = null; 
  17.         try { 
  18.             r = new FileReader(doc); 
  19.             w = new FileWriter(copy); 
  20.               
  21.             //方式一:单个字符写入 
  22.             int temp = 0; 
  23.             while((temp = r.read()) != -1) { 
  24.                 w.write(temp); 
  25.             } 
  26.               
  27.             //方式二:字符数组方式写入 
  28.             /* 
  29.             char[] buf = new char[1024]; 
  30.             int temp = 0; 
  31.             while ((temp = r.read(buf)) != -1) { 
  32.                 w.write(new String(buf,0,temp)); 
  33.             } 
  34.             */ 
  35.               
  36.         } catch (IOException e) { 
  37.             e.printStackTrace(); 
  38.         } finally { 
  39.             //分别判断是否空指针引用,然后关闭流 
  40.             if(r != null) { 
  41.                 try { 
  42.                     r.close(); 
  43.                 } catch (IOException e) { 
  44.                     e.printStackTrace(); 
  45.                 } 
  46.             } 
  47.             if(w != null) { 
  48.                 try { 
  49.                     w.close(); 
  50.                 } catch (IOException e) { 
  51.                     e.printStackTrace(); 
  52.                 } 
  53.             } 
  54.         } 
  55.     } 
实例4:利用字符流的缓冲区来进行文本文件的复制
  1. import java.io.BufferedReader; 
  2. import java.io.BufferedWriter; 
  3. import java.io.File; 
  4. import java.io.FileReader; 
  5. import java.io.FileWriter; 
  6. import java.io.IOException; 
  7.   
  8. public class Demo { 
  9.     public static void main(String[] args ) { 
  10.           
  11.         String doc = File.separator + "home" + File.separator + "siu" +  
  12.                       File.separator + "work" + File.separator + "demo.txt"; 
  13.           
  14.         String copy = File.separator + "home" + File.separator + "siu" +  
  15.                      File.separator + "life" + File.separator + "lrc.txt"; 
  16.   
  17.         FileReader r = null; 
  18.         FileWriter w = null; 
  19.         //创建缓冲区的引用 
  20.         BufferedReader br = null; 
  21.         BufferedWriter bw = null; 
  22.         try { 
  23.             r = new FileReader(doc); 
  24.             w = new FileWriter(copy); 
  25.             //创建缓冲区对象 
  26.             //将需要提高效率的FileReader和FileWriter对象放入其构造函数内 
  27.             //当然,也可以使用匿名对象的方式 br = new BufferedReader(new FileReader(doc)); 
  28.             br = new BufferedReader(r); 
  29.             bw = new BufferedWriter(w); 
  30.               
  31.             String line = null; 
  32.             //读取行,直到返回null 
  33.             //readLine()方法只返回换行符之前的数据 
  34.             while((line = br.readLine()) != null) { 
  35.                 //使用BufferWriter对象的写入方法 
  36.                 bw.write(line); 
  37.                 //写完文件内容之后换行 
  38.                 //newLine()方法依据平台而定 
  39.                 //windows下的换行是\r\n 
  40.                 //Linux下则是\n 
  41.                 bw.newLine(); 
  42.             }        
  43.               
  44.         } catch (IOException e) { 
  45.             e.printStackTrace(); 
  46.         } finally { 
  47.             //此处不再需要捕捉FileReader和FileWriter对象的异常 
  48.             //关闭缓冲区就是关闭缓冲区中的流对象 
  49.             if(br != null) { 
  50.                 try { 
  51.                     r.close(); 
  52.                 } catch (IOException e) { 
  53.                     e.printStackTrace(); 
  54.                 } 
  55.             } 
  56.             if(bw != null) { 
  57.                 try { 
  58.                     bw.close(); 
  59.                 } catch (IOException e) { 
  60.                     e.printStackTrace(); 
  61.                 } 
  62.             } 
  63.         } 
  64.     } 

转载于:https://blog.51cto.com/wxweven520/1097203

java中的IO操作总结(一)相关推荐

  1. java中的IO操作总结

    java中的IO操作 在java中IO涉及的范围比较大,本文主要针对文件内容的读写 对于文件内容的操作主要分为两大类: 字符流:有两个抽象类 writer Reader 其对应子类FileWriter ...

  2. java中的IO操作之File类

    Java的集合框架:  类和接口存在于java.util包中. Java的IO:               类和接口存在于java.io包中. 学习方法:  文档在手,天下我有! --------- ...

  3. Java中的IO技术使用总结

    请尊重他人劳动成果,请勿随意剽窃,转载请注明,谢谢!转载请注明出处:http://blog.csdn.net/evan_man/article/details/51983126          Ja ...

  4. java中的IO详解(上)

    Java中的IO整理完整版(一) [案例1]创建一个新文件 1 import java.io.*; 2 class hello{ 3     public static void main(Strin ...

  5. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

  6. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  7. 深入理解Java中的IO

    本文转载自:深入理解Java中的IO 为了方便理解与阐述,先引入两张图 在整个Java.io包中最重要的就是5个类和一个接口. 5个类指的是File.OutputStream.InputStream. ...

  8. java io类型_Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

  9. 猿创征文|Java中的IO流大家族 (两万字详解)

    目录 IO流 概述 分类 四大家族 需要掌握的16个流 文件专属 FileInputstream(读 字节) FileInputStream类的其他常用方法 FileOutputStream (写 字 ...

最新文章

  1. php参数一个字符串数组,PHP字符串控制台参数到数组
  2. 《Hadoop权威指南》第二章 关于MapReduce
  3. esp8266 擦拭_【一起玩esp8266】flash的擦除方法——专治疑难杂症
  4. 随时随地办公新常态 还需安全来相伴
  5. javascript设计模式之发布订阅模式
  6. 系统架构设计-项目管理
  7. Python+旧衣物捐赠系统 毕业设计-附源码290942
  8. pdf转换html器 免费版,pdf转换成html转换器
  9. 什么是用户代理样式表
  10. openwrt 使用ebtables限制设备访问外网或内网
  11. 电脑 及 电脑应用软件背景色、字体的设置(护眼色)
  12. 游戏辅助制作核心--植物大战僵尸逆向之阳光修改(一)
  13. 2016SDAU编程练习二1009
  14. 2022CCPC桂林站感想与反思
  15. python程序run不了_无法通过计划程序正确运行Python脚本
  16. 路缘石成型机的安装使用和施工
  17. 【数据分析】数据分析方法论
  18. python爬取文字和图片_Python学习第七天之爬虫的学习与使用(爬取文字、图片、 视频)...
  19. Google大数据三大论文-MapReduce--中文翻译
  20. java同步和异步机制_JAVA学习过程中的知识——java多线程的同步和异步

热门文章

  1. mysql 数据库快照迁移_快照方式备份mysql 数据库
  2. 入门月薪8k,3年经验年薪30w,大数据薪酬待遇竟这么高?
  3. python垂直输出hello_python - 我如何获得直方图以垂直输出数据? - SO中文参考 - www.soinside.com...
  4. mysql+dump+选项_mysqldump 备份常用选项以及备份脚本
  5. 渗透测试是否需要学习Linux
  6. 惠斯通电桥信号调理芯片_用惠斯通电桥测电阻
  7. 图论 + 数论 ---- CF1325E E. Ehab‘s REAL Number Theory Problem (约数个数 + 枚举 + bfs找最小环)[从图结构优化搜索]
  8. codeforces1700数学:E2. Close Tuples (hard version)[组合计数 逆向统计] D. Circle Game[对称博弈考虑对称状态的胜负]
  9. 2019秦皇岛ccpc A题:Angle Beats[计算几何:统计符合直角三角形的个数]+[向量hash+3hash]
  10. appium java类库下载,appium 简明教程 (4)——appium client 的安装