序:IO流的操作主要分为两种读和写。一方面:我们可以通过不加缓冲类字符流BufferedReader/Writer和字节流BufferedInputStream/OutputStream来进行简单的读写,当然加了缓冲类其效率更高。另一方面:当我们需要进行流转换时,主要为了解决读取乱码问题,且字节流能够进行编码指定,因此需要字节流到字符流的转换。

1.字符流的读写+不加BufferedReader/Writer

  1. public class CharIOTest {
  2.  
  3. /**
  4. * 流转换读取数据.
  5. * @throws FileNotFoundException
  6. * @throws IOException
  7. * @throws IOException
  8. */
  9. @Test
  10. public void readChangeTest() throws IOException {
  11. File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\1.txt");// 指定要读取的文件
  12. FileInputStream fis = new FileInputStream(file);// 获取该文件的输入流
  13. InputStreamReader isr=new InputStreamReader(fis, "gbk");
  14. char[] bb = new char[1024];// 用来保存每次读取到的字符
  15. StringBuffer sb = new StringBuffer();// 用来将每次读取到的字符拼接,当然使用StringBuffer类更好
  16. int n;// 每次读取到的字符长度
  17. while ((n = isr.read(bb)) != -1) {
  18. sb.append(new String(bb, 0, n));
  19. }
  20. isr.close();// 关闭输入流,释放连接
  21. System.out.println(sb);
  22. }
  23.  
  24. /**
  25. * 没有进行字符编码的指定,因此只适合程序生成的文本文件的读取。
  26. * 好处:代码少写几行,但不通用。
  27. * @throws IOException
  28. */
  29. @Test
  30. public void readTest() throws IOException {
  31. File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\2.txt");// 指定要读取的文件
  32.  
  33. FileReader fr=new FileReader(file);
  34. // System.out.println(fr.getEncoding());
  35. char[] bb = new char[1024];// 用来保存每次读取到的字符
  36. StringBuffer sb = new StringBuffer();// 用来将每次读取到的字符拼接,当然使用StringBuffer类更好
  37. int n;// 每次读取到的字符长度
  38. while ((n = fr.read(bb)) != -1) {
  39. sb.append(new String(bb, 0, n));
  40. }
  41. fr.close();// 关闭输入流,释放连接
  42. System.out.println(sb);
  43. }
  44.  
  45. /**
  46. * 往文件里写入数据.
  47. * @throws IOException
  48. */
  49. @Test
  50. public void writeTest() throws IOException {
  51. String writerContent = "hello world,你好世界";// 要写入的文本
  52. File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\2.txt");// 要写入的文本文件
  53. if (!file.exists()) {// 如果文件不存在,则创建该文件
  54. file.createNewFile();
  55. }
  56.  
  57. FileWriter writer = new FileWriter(file);// 获取该文件的输出流
  58. System.out.println(writer.getEncoding());
  59. // 写内容 ,默认使用writer.getEncoding()进行写入,不会出现乱码,因为得到的文件的编码便是写入的编码
  60. writer.write(writerContent);
  61. writer.flush();// 清空缓冲区,立即将输出流里的内容写到文件里
  62. writer.close();// 关闭输出流,施放资源
  63. }
  64. }

2.字节流的读写+不加BufferedInputStream/OutputStream

  1. public class ByteIOTest {
  2. /**
  3. *
  4. * 将D盘下的D:\\xxx.ico文件,读取后,再存到E盘下面.
  5. *
  6. * @param args
  7. * @throws Exception
  8. */
  9. @Test
  10. public void imageIOTest(String[] args) throws Exception {
  11. FileInputStream in = new FileInputStream(new File("D:\\xxx.ico"));// 指定要读取的图片
  12. File file = new File("E:\\test.jpg");
  13. if (!file.exists()) {// 如果文件不存在,则创建该文件
  14. file.createNewFile();
  15. }
  16. FileOutputStream out = new FileOutputStream(new File("E:\\yuanwang.ico"));// 指定要写入的图片
  17. int n = 0;// 每次读取的字节长度
  18. byte[] bb = new byte[1024];// 存储每次读取的内容
  19. while ((n = in.read(bb)) != -1) {
  20. out.write(bb, 0, n);// 将读取的内容,写入到输出流当中
  21. }
  22. out.close();// 关闭输入输出流
  23. in.close();
  24. }
  25. }

3.字符流的读写+加BufferedReader/Writer

  1. public class BufferCharIOTest {
  2. /**
  3. * 考虑到编码问题-转换流读取,即字节流->字符流
  4. windows系统下默认编码为gbk,即所读取文本为gbk编码。
  5. 因此如果myeclipse的默认是utf-8编码的话则读取中文时会出现乱码
  6. 情况,utf8 中文会默认3个字节,而gbk 中文默认2个字节。
  7. 一个字符在不同编码的情况下,其所对应的字节数是不相同,字符有中文字符,英文字符,数字字符等等
  8. * @throws FileNotFoundException
  9. * @throws IOException
  10. */
  11. @Test
  12. public void readChangeTest() throws FileNotFoundException, IOException {
  13. File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\1.txt");// 指定要读取的文件
  14. // 获得该文件的缓冲输入流
  15. //BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  16.  
  17. BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
  18. InputStreamReader isr=new InputStreamReader(bis, "gbk");
  19.  
  20. char[] bb = new char[1024];// 用来保存每次读取到的字符
  21. StringBuffer sb = new StringBuffer();// 用来将每次读取到的字符拼接,当然使用StringBuffer类更好
  22. int n;// 每次读取到的字符长度
  23. while ((n = isr.read(bb)) != -1) {
  24. sb.append(new String(bb, 0, n));
  25. }
  26. isr.close();// 关闭输入流,释放连接
  27. System.out.println(sb);
  28. }
  29.  
  30. /**
  31. * 没有进行字符编码的指定,因此只适合程序生成的文本文件的读取。
  32. * 好处:代码少写几行,但不通用。
  33. * @throws IOException
  34. */
  35. @Test
  36. public void readTest() throws FileNotFoundException, IOException {
  37. File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\1.txt");// 指定要读取的文件
  38. // 获得该文件的缓冲输入流
  39. BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  40. String line = "";// 用来保存每次读取一行的内容
  41. while ((line = bufferedReader.readLine()) != null) {
  42. System.out.println(line);
  43. }
  44. bufferedReader.close();// 关闭输入流
  45. }
  46.  
  47. /**
  48. * 在写入过程中,不需要考虑编码问题,
  49. * 因为生成的文件文本的编码会与写入编码一致。因此不会出现乱码情况
  50. *
  51. * @throws IOException
  52. */
  53. @Test
  54. public void writeTest() throws IOException {
  55. File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\2.txt");// 指定要写入的文件
  56. if (!file.exists()) {// 如果文件不存在则创建
  57. file.createNewFile();
  58. }
  59. // 获取该文件的缓冲输出流
  60. BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
  61. // 写入信息
  62. bufferedWriter.write("你好世界");
  63. bufferedWriter.newLine();// 表示换行
  64. bufferedWriter.write("hello world");
  65. bufferedWriter.flush();// 清空缓冲区
  66. bufferedWriter.close();// 关闭输出流
  67. }
  68. }

4.字节流的读写+加BufferedInputStream/OutputStream

  1. public class BufferByteIOTest {
  2. public void imageIOTest(String[] args) throws Exception {
  3. // 指定要读取文件的缓冲输入字节流
  4. BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:\\xx.jpg"));
  5. File file = new File("E:\\xx.jpg");
  6. if (file != null) {
  7. file.createNewFile();
  8. }
  9. // 指定要写入文件的缓冲输出字节流
  10. BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
  11. byte[] bb = new byte[1024];// 用来存储每次读取到的字节数组
  12. int n;// 每次读取到的字节数组的长度
  13. while ((n = in.read(bb)) != -1) {
  14. out.write(bb, 0, n);// 写入到输出流
  15. }
  16. out.close();// 关闭流
  17. in.close();
  18. }
  19. }

java+++IO流操作的更多相关文章

  1. Java IO流操作汇总: inputStream 和 outputStream【转】

    我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...

  2. Java IO流操作 (I)

    1.FileWriter 写数据---输出流---由控制台向文件中写数据 import java.io.FileWriter; import java.io.IOException; /* * 写数据 ...

  3. Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)

    1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...

  4. Java IO流操作 (II)

    缓冲流 /* * BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入. * BufferedReader:从字符输入流中读取文本,缓冲各个字符, ...

  5. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  6. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  7. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  9. java IO流 之 其他流

    一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一).   public class ByteArrayInputStream extends ...

随机推荐

  1. #DP# ----- OpenJudge山区建小学

    没有记性.到DP不得不写博了,三天后又忘的干干净净.DP是啥 :-) 一道久到不能再久的题了. OpenJudge  7624:山区建小学 总时间限制: 1000ms     内存限制: 65536k ...

  2. PayPal为什么从Java迁移到Node.js

    前言 大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal  解释了为什么从Java迁移出来的原因: 开发效率提高一 ...

  3. Bootstrap入门(十七)组件11:分页与标签

    Bootstrap入门(十七)组件11:分页与标签   1.默认样式的分页 2.分页的大小 3.禁用的分页 4.翻页的效果 5.两端对齐的分页 6. 标签的不同样式 7. 标签的大小   先引入本地的 ...

  4. HoloLens开发手记 - 构建2D应用 Building 2D apps

    HoloLens可以让我们在真实世界中看到全息图像内容.但是它本质上还是一台Windows 10设备,这意味着HoloLens可以以2D应用形式运行Windows Store里的大部分UWP应用. 目 ...

  5. IE6支持透明PNG图片解决方案:DD_belatedPNG.js

    DD_belatedPNG.js 是一个能是IE6支持p显示ng透明图片,而且还支持背景循环(background-repeat)和定位(backgrond-position) ,支持focus,Ho ...

  6. 穷举 迭代 while

    for循环拥有两类: 穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 例:1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元.求刚好花 ...

  7. jquery 高级 学习笔记

    --jquery 和 原生js可以共存,但不能混用.jquery 可以通过get()方法 转换为原生js. $("#div1").get(0).innerHTML; get() 需 ...

  8. MySQL性能优化方案

    $stmt->execute(); // 绑定结果 $stmt->bind_result($username); // 移动游标 $stmt->fetch(); printf(&qu ...

  9. C语言 memcpy二维数组的复制

    今天在实现二维数组的复制功能时,竟然出现了好多问题,还是太不小心了. 我们知道,平时进行矩阵复制,无非是二重循环进行赋值操作,所以今天想改用利用memcpy进行复制操作,当然一维数组的复制在上一篇文章 ...

  10. img图片标签alt和title属性的区别

    alt 用于图片没显示图片显示区域显示说明文字title 表示鼠标图片停留显示悬浮框其显示文字