前言

  任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作。这里简单介绍下reader,wirter,inputstream,outputstream的使用方法。其实Apache commons里面有个方法IOUtils可是实现方便快捷的流拷贝,感兴趣的可以参考官方文档。

  JAVA的输入输出流有两种,一种是字节流(InPutStream,OutPutStream),一种是字符流(Reader,Writer)。

  字节流是普遍适用的,比如我们读取一个视频,音乐,或者文本都可以用这种方式。

  字符流只能读取类似文本这种文件。那么它们之间是什么关系呢?看下面这张图吧!

  大致可以看到它们之间的关系,我们可以使用InPutStreamReader来实现字节流到字符流的转换。比如

  1. Reader reader = new InputStreamReader(new FileInputStream(fileName));

  也可以使用OutPutStreamWriter来实现字节流到字符流的转换,如

  1. Writer writer = new OutputStreamWriter(new FileOutputStream(filePathName));

  下面简单介绍下,文件读取和文件写入的样例!

  按行读取文件!

  1. /**
  2. * 以行为单位读取文件,常用于读面向行的格式化文件
  3. *
  4. * @paramfileName:文件名
  5. */
  6. public static List<String> readFileByLines(String fileName) {
  7. List<String> list = new ArrayList<String>();
  8. if (fileName != null && !"".equals(fileName)) {
  9. File file = new File(fileName);
  10. BufferedReader reader = null;
  11. try {
  12. System.out.println("以行为单位读取文件内容,一次读一整行:");
  13. reader = new BufferedReader(new FileReader(file));
  14. String tempString = null;
  15. /* 一次读入一行,直到读入null为文件结束 */
  16. while ((tempString = reader.readLine()) != null) {
  17. System.out.println(tempString);
  18. list.add(tempString);
  19. }
  20. } catch (IOException e) {
  21. System.out.println("读取文本文件异常" + e);
  22. } finally {
  23. if (reader != null) {
  24. try {
  25. reader.close();
  26. } catch (IOException e1) {
  27. System.out.println("读取文本文件异常" + e1);
  28. }
  29. }
  30. }
  31. }
  32. return list;
  33. }

  向文件中写入内容,直接覆盖掉原来的内容。

  1. /**
  2. * 把内容写到文件
  3. *
  4. * @paramfilePathName文件名
  5. * @paramList<String>文件内容
  6. */
  7. public static boolean writerFile(String filePathName, String content) {
  8. boolean flag = false;
  9. OutputStreamWriter osw = null;
  10. try {
  11. if (filePathName != null && !"".equals(filePathName)) {
  12. osw = new OutputStreamWriter(new FileOutputStream(filePathName));
  13. }
  14. } catch (FileNotFoundException e1) {
  15. flag = false;
  16. e1.printStackTrace();
  17. }
  18. if (osw != null) {
  19. BufferedWriter bw = new BufferedWriter(osw);
  20. try {
  21. if (content != null && !"".equals(content)) {
  22. bw.write(content);
  23. flag = true;
  24. }
  25. } catch (IOException e) {
  26. flag = false;
  27. e.printStackTrace();
  28. } finally {
  29. try {
  30. bw.close();
  31. osw.close();
  32. } catch (IOException e) {
  33. flag = false;
  34. e.printStackTrace();
  35. }
  36. }
  37. }
  38. return flag;
  39. }

  向文件中追加内容,追加到末尾。

  1. /**
  2. * 把内容写到文件或追加到文件中
  3. *
  4. * @paramfilePathName文件名
  5. * @paramList<String>文件内容
  6. */
  7. public static boolean writerFileIsAppend(String filePathName, String content) {
  8. boolean flag = false;
  9. OutputStreamWriter osw = null;
  10. try {
  11. if (filePathName != null && !"".equals(filePathName)) {
  12. osw = new OutputStreamWriter(new FileOutputStream(filePathName,
  13. true));
  14. }
  15. } catch (Exception e1) {
  16. flag = false;
  17. e1.printStackTrace();
  18. }
  19. if (osw != null) {
  20. BufferedWriter bw = new BufferedWriter(osw);
  21. try {
  22. if (content != null && !"".equals(content)) {
  23. bw.write(content);
  24. flag = true;
  25. }
  26. } catch (IOException e) {
  27. flag = false;
  28. e.printStackTrace();
  29. } finally {
  30. try {
  31. bw.close();
  32. osw.close();
  33. } catch (IOException e) {
  34. flag = false;
  35. e.printStackTrace();
  36. }
  37. }
  38. }
  39. return flag;
  40. }

  全部代码

  

  1. package testIO;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.FileReader;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.io.InputStreamReader;
  13. import java.io.OutputStreamWriter;
  14. import java.io.Reader;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17.  
  18. public class testIO {
  19. public static void main(String[] args) {
  20. readFileByBytes("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
  21. readFileByChars("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
  22. readFileByLines("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
  23. writerFile("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt",
  24. "BufferedWriter");
  25. writerFileIsAppend("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt",
  26. "Append");
  27. }
  28.  
  29. /**
  30. * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
  31. *
  32. * @paramfileName:文件的名
  33. */
  34. public static void readFileByBytes(String fileName) {
  35. File file = new File(fileName);
  36. InputStream in = null;
  37. try {
  38. System.out.println("以字节为单位读取文件内容,一次读多个字节:");
  39. /* 一次读多个字节 */
  40. byte[] tempbytes = new byte[100];
  41. int byteread = 0;
  42. in = new FileInputStream(file);
  43. /* 读入多个字节到字节数组中,byteread为一次读入的字节数 */
  44. while ((byteread = in.read(tempbytes)) != -1) {
  45. for (byte b : tempbytes) {
  46. System.out.println((char) b);
  47. }
  48. System.out.println(byteread);
  49. }
  50. } catch (Exception e1) {
  51. System.out.println("读取文本文件异常" + e1);
  52. } finally {
  53. if (in != null) {
  54. try {
  55. in.close();
  56. } catch (IOException e1) {
  57. System.out.println("读取文本文件异常" + e1);
  58. }
  59. }
  60. }
  61. }
  62.  
  63. /**
  64. * 以字符为单位读取文件,常用于读文本,数字等类型的文件
  65. *
  66. * @paramfileName:文件名
  67. */
  68. public static void readFileByChars(String fileName) {
  69. Reader reader = null;
  70. try {
  71. System.out.println("以字符为单位读取文件内容,一次读多个字节:");
  72. /* 一次读多个字符 */
  73. char[] tempchars = new char[100];
  74. int charread = 0;
  75. if (fileName != null && !"".equals(fileName)) {
  76. reader = new InputStreamReader(new FileInputStream(fileName));
  77. /* 读入多个字符到字符数组中,charread为一次读取字符数 */
  78. while ((charread = reader.read(tempchars)) != -1) {
  79. for (char c : tempchars) {
  80. System.out.println(c);
  81. }
  82. }
  83. }
  84. } catch (Exception e1) {
  85. System.out.println("读取文本文件异常" + e1);
  86. } finally {
  87. if (reader != null) {
  88. try {
  89. reader.close();
  90. } catch (IOException e1) {
  91. System.out.println("读取文本文件异常" + e1);
  92. }
  93. }
  94. }
  95. }
  96.  
  97. /**
  98. * 以行为单位读取文件,常用于读面向行的格式化文件
  99. *
  100. * @paramfileName:文件名
  101. */
  102. public static List<String> readFileByLines(String fileName) {
  103. List<String> list = new ArrayList<String>();
  104. if (fileName != null && !"".equals(fileName)) {
  105. File file = new File(fileName);
  106. BufferedReader reader = null;
  107. try {
  108. System.out.println("以行为单位读取文件内容,一次读一整行:");
  109. reader = new BufferedReader(new FileReader(file));
  110. String tempString = null;
  111. /* 一次读入一行,直到读入null为文件结束 */
  112. while ((tempString = reader.readLine()) != null) {
  113. System.out.println(tempString);
  114. list.add(tempString);
  115. }
  116. } catch (IOException e) {
  117. System.out.println("读取文本文件异常" + e);
  118. } finally {
  119. if (reader != null) {
  120. try {
  121. reader.close();
  122. } catch (IOException e1) {
  123. System.out.println("读取文本文件异常" + e1);
  124. }
  125. }
  126. }
  127. }
  128. return list;
  129. }
  130.  
  131. /**
  132. * 把内容写到文件
  133. *
  134. * @paramfilePathName文件名
  135. * @paramList<String>文件内容
  136. */
  137. public static boolean writerFile(String filePathName, String content) {
  138. boolean flag = false;
  139. OutputStreamWriter osw = null;
  140. try {
  141. if (filePathName != null && !"".equals(filePathName)) {
  142. osw = new OutputStreamWriter(new FileOutputStream(filePathName));
  143. }
  144. } catch (FileNotFoundException e1) {
  145. flag = false;
  146. e1.printStackTrace();
  147. }
  148. if (osw != null) {
  149. BufferedWriter bw = new BufferedWriter(osw);
  150. try {
  151. if (content != null && !"".equals(content)) {
  152. bw.write(content);
  153. flag = true;
  154. }
  155. } catch (IOException e) {
  156. flag = false;
  157. e.printStackTrace();
  158. } finally {
  159. try {
  160. bw.close();
  161. osw.close();
  162. } catch (IOException e) {
  163. flag = false;
  164. e.printStackTrace();
  165. }
  166. }
  167. }
  168. return flag;
  169. }
  170.  
  171. /**
  172. * 把内容写到文件或追加到文件中
  173. *
  174. * @paramfilePathName文件名
  175. * @paramList<String>文件内容
  176. */
  177. public static boolean writerFileIsAppend(String filePathName, String content) {
  178. boolean flag = false;
  179. OutputStreamWriter osw = null;
  180. try {
  181. if (filePathName != null && !"".equals(filePathName)) {
  182. osw = new OutputStreamWriter(new FileOutputStream(filePathName,
  183. true));
  184. }
  185. } catch (Exception e1) {
  186. flag = false;
  187. e1.printStackTrace();
  188. }
  189. if (osw != null) {
  190. BufferedWriter bw = new BufferedWriter(osw);
  191. try {
  192. if (content != null && !"".equals(content)) {
  193. bw.write(content);
  194. flag = true;
  195. }
  196. } catch (IOException e) {
  197. flag = false;
  198. e.printStackTrace();
  199. } finally {
  200. try {
  201. bw.close();
  202. osw.close();
  203. } catch (IOException e) {
  204. flag = false;
  205. e.printStackTrace();
  206. }
  207. }
  208. }
  209. return flag;
  210. }
  211. }

  内容参考

http://www.2cto.com/kf/201206/136072.html

http://blog.csdn.net/liuhenghui5201/article/details/8292552

【java开发系列】—— java输入输出流的更多相关文章

  1. java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器

    java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...

  2. 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器

    java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...

  3. JAVA之I/O 输入输出流详解

    简    介 如何在Java中进行文件的读写,Java IO流是必备的知识.这篇博文主要为您带来Java中的输入输出流的内容,包括文件编码.使用File类对文件和目录进行管理.字节流和字符流的基本操作 ...

  4. Java修炼——文件字节输入输出流复制和缓冲流复制

    一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...

  5. 【java开发系列】—— JDK安装

    前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行j ...

  6. 【java开发系列】—— Tomcat编译报错

    由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...

  7. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  8. Java开发系列-JDBC

    概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...

  9. Java面试系列--java基础

    Java基础总结 JAVA中的几种基本数据类型是什么,各自占用多少字节. 八大基本数据类型,byte:8位,short:16位,int:32位,long:64位,float:32位,double:64 ...

随机推荐

  1. UVALive - 3942 左儿子trie DP

    题意:白书P209 本题用普通字典树会更快,为了练习还是尝试再敲一遍左儿子-右兄弟字典树(其实就是字典树上开前向星) dp[i]为满足[i...len)的分配方案数,转移方程为dp[i]=sum{dp ...

  2. B - Toy Storage(POJ - 2398) 计算几何基础题,比TOYS多了个线段排序

    Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing ...

  3. table加载慢

    为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析html时,table是作为一个整体解释的,使用tbody可以优化显示,如果表格很长,用tbody分段,可以一部分一部分地显示, ...

  4. css 浮动元素居中

    方法一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. TCP/IP协议分为哪四层,具体作用是什么。

    TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP).文件传输协议(FTP).网络远 ...

  6. PIXI 太空玉兔游戏(6)

    想法来源  出于练习看到这篇文章   没有什么难度  效果如下,接下来会用pixijs讲解如何实现 创建应用及舞台 HTML部分只创建标签引入 pixi.min.js  即可: <script ...

  7. python3初探

      官方网站:https://www.python.org/ 类库大全:https://pypi.python.org/pypi 基础类库:https://docs.python.org/3/libr ...

  8. PyCharm常见用法

    1.设置python运行版本: File-->Setting-->Project-->Project Interpreter 2.代码批量左移/右移一个tab: 鼠标选中行,Tab右 ...

  9. 记一次MongoDB性能问题

    下面文章转载自火丁笔记,原作者描述了一次MongoDB数据迁移过程中遇到的性能问题及其解决方案,中间追查问题的方法和工具值得我们学习.下面是其原文: 最近忙着把一个项目从MySQL迁移到MongoDB ...

  10. 九度oj题目1153:括号匹配问题

    题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4866 解决:2112 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见 ...