结点流:直接对File类进行操作的文件流

  1. package stream;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8.  
  9. import org.junit.jupiter.api.Test;
  10.  
  11. /*
  12. * 流的体系结构: 抽象基类 节点流(或文件流) 缓冲流(处理流的一种)
  13. * 字节输入流 InputStream FileInputStream BufferedInputStream
  14. * 字节输出流 OutputStream FileOutputStream BufferedOutputStream
  15. * 字符输入流 Reader FileReader BufferedReader
  16. * 字符输出流 Writer FileWriter BufferedWriter
  17. *
  18. * 字符流只能处理字符,字节流能处理图片,二进制文件
  19. * */
  20. public class FileReaderWriterTest {
  21.  
  22. @Test
  23. public void test() throws IOException {
  24. //1.实例化File类的对象
  25. //2.提供具体的流
  26. FileReader fr = null;
  27. try {
  28. File file = new File("hello .txt");
  29. System.out.println(file.getAbsolutePath());
  30.  
  31. File file1 = new File("C:\\Users\\ASUS\\Desktop\\JAVAEE\\practice\\IO_FIle\\hello.txt");
  32. System.out.println(file1.getAbsolutePath());
  33.  
  34. fr = new FileReader(file);
  35.  
  36. //3.数据的读入:
  37. //read()方法:return一个读入的字符,如果读到结尾则输出-1
  38. int data;
  39. while((data = fr.read())!=-1)
  40. System.out.println((char)data);
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. finally {
  45. //4.流的关闭操作
  46. try {
  47. if(fr != null)
  48. fr.close();
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. }
  52. }
  53. }
  54.  
  55. //对read()操作升级:使用read的重载方法
  56. @Test
  57. public void testFileReader1() {
  58. //2.FileReader流的实例化
  59. FileReader fr = null;
  60. try {
  61. //1.File
  62. File file = new File("hello.txt");
  63. fr = new FileReader(file);
  64. //3.读入的操作
  65. //read(buf):返回每次读入buf的字符的个数,如果达到文件尾,返回-1
  66. char [] buf = new char[5];
  67. int len;
  68. while((len = fr.read(buf)) != -1) {
  69. String s = new String(buf,0,len);
  70. System.out.println(s);
  71. }
  72. } catch (Exception e) {
  73. // TODO Auto-generated catch block
  74. e.printStackTrace();
  75. }
  76. finally {
  77. try {
  78. //4.资源的关闭
  79. if(fr!=null)
  80. fr.close();
  81. } catch (IOException e) {
  82. e.printStackTrace();
  83. }
  84. }
  85. }
  86.  
  87. /*
  88. * 输出操作:对应的File可以不存在的
  89. * 如果不存在,在输出的过程中会自动创建此文件
  90. * 如果存在,则会覆盖此文件
  91. * 但是可以增加第二个参数 true 进行追加
  92. */
  93. @Test
  94. public void testFileWriter() {
  95. FileWriter fw = null;
  96. try {
  97. //1.提出File类的对象,指明写出到的文件
  98. File file = new File("hello1.txt");
  99. //2.提供FileWriter的对象,用于数据的写出
  100. fw = new FileWriter(file);
  101. //3.写出的操作
  102. fw.write("i have a dream.\n");
  103. fw.write("you have a dream too");
  104. } catch (Exception e) {
  105. e.printStackTrace();
  106. }
  107. finally {
  108. //4.关闭流
  109. try {
  110. if(fw != null)
  111. fw.close();
  112. } catch (IOException e) {
  113. e.printStackTrace();
  114. }
  115. }
  116. }
  117.  
  118. /*
  119. * 进行文件复制
  120. * */
  121. @Test
  122. public void testFileReaderFileWriter() {
  123. FileReader fr = null;
  124. FileWriter fw = null;
  125. try {
  126. File sfile = new File("hello.txt");
  127. File ttfile = new File("hello2.txt");
  128.  
  129. fr = new FileReader(sfile);
  130. fw = new FileWriter(ttfile);
  131.  
  132. char [] buf = new char[5];
  133. int len;
  134. while((len = fr.read(buf))!=-1) {
  135. fw.write(buf,0,len);
  136. }
  137. } catch (Exception e) {
  138. e.printStackTrace();
  139. }
  140. finally {
  141. //4.关闭资源
  142. try {
  143. fw.close();
  144. } catch (IOException e) {
  145. e.printStackTrace();
  146. }
  147.  
  148. try {
  149. fr.close();
  150. } catch (IOException e) {
  151. e.printStackTrace();
  152. }
  153. }
  154. }
  155. }

包装流:用来修饰节点流

缓冲流加速

  1. package stream;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.BufferedReader;
  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.io.FileNotFoundException;
  9. import java.io.FileOutputStream;
  10. import java.io.IOException;
  11.  
  12. import org.junit.jupiter.api.Test;
  13.  
  14. /*
  15. * 1.缓冲流
  16. * BufferedInputStream
  17. * BufferedOutputStream
  18. * BufferedReader
  19. * BufferedWriter
  20. *
  21. * 2.作用:提高流的读取写入速度
  22. *
  23. * */
  24.  
  25. public class BufferedTest {
  26.  
  27. /*
  28. * 实现非文本文件的赋值
  29. * */
  30. @Test
  31. public void BufferedStreamTest(){
  32. BufferedInputStream brs = null;
  33. BufferedOutputStream bos = null;
  34. try {
  35. File sfile = new File("zsben.jpg");
  36. File tfile = new File("zsben3.jpg");
  37.  
  38. FileInputStream fis = new FileInputStream(sfile);
  39. FileOutputStream fos = new FileOutputStream(tfile);
  40.  
  41. brs = new BufferedInputStream(fis);
  42. bos = new BufferedOutputStream(fos);
  43.  
  44. byte[] buffer = new byte[10];
  45. int len;
  46. while((len = brs.read(buffer))!=-1) {
  47. bos.write(buffer,0,len);
  48. }
  49. } catch (Exception e) {
  50. // TODO Auto-generated catch block
  51. e.printStackTrace();
  52. }
  53. finally {
  54. try {
  55. //关闭外层流的同时, 内层流也会自动被关闭
  56. brs.close();
  57. } catch (Exception e) {
  58. e.printStackTrace();
  59. }
  60. try {
  61. bos.close();
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66.  
  67. }
  68. }

转换流进行编码和解码

  1. package stream;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.UnsupportedEncodingException;
  9.  
  10. import org.junit.jupiter.api.Test;
  11.  
  12. /*
  13. * 处理流之二:转换流
  14. * InputStreamWriter:字节输入流->字符输入流
  15. * OutputStreamWriter:字符输出流->字节输出流
  16. * 字节->字符 (97->'a'):即一个解码过程
  17. * 字符->字节 ('a'->97):即一个编码过程
  18. * */
  19.  
  20. public class InputStreamReaderITest {
  21. @Test
  22. public void test1() throws IOException {
  23. //第二个参数:file保存时使用的编码方式
  24. InputStreamReader isr= null;
  25. try {
  26. File file = new File("hello.txt");
  27. FileInputStream fis = new FileInputStream(file);
  28.  
  29. isr = new InputStreamReader(fis,"gbk");//原来使用gbk编码存的,这儿换成UTF-8就会使中文字符乱码
  30.  
  31. char [] buf = new char[20];
  32. int len;
  33. while((len = isr.read(buf))!=-1) {
  34.  
  35. String s = new String(buf,0,len);
  36. System.out.println(s);
  37.  
  38. }
  39. } catch (Exception e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. }
  43.  
  44. isr.close();
  45. }
  46. }

java 节点流(字符流,字节流)和包装流(缓冲流,转换流)的更多相关文章

  1. io基础(字节流、字符流、转换流、缓冲字符流)

    首先需要明确的一点是输入流输出流的输入输出是站在内存的角度看的,读取文件,把文件内容写到内存中,是输入流:写文件,把内存中的数据写到文件中,是输出流. IO操作主要有4个抽象类: 字节输入输出流:In ...

  2. Java IO学习笔记(三)转换流、数据流、字节数组流

    转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和 ...

  3. Java转换流、缓冲流、流操作规律整理

    转换流 1.1                OutputStreamWriter类 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字 ...

  4. JAVA-IO操作,字节-字符转换流

    掌握OutputStreamWriter和InputStreamReader类的作用 一般操作输入输出内容的时候,就需要使用字节或字符流,但是,有些时候,需要将字符流变成字节流形式,或者字节流变成字符 ...

  5. Java IO编程——转换流

    所谓的转换流指的是可以实现字节流与字符流操作的功能转换,例如:进行输出的时候OutputStream需要将内容变为字节数组后才可以进行输出,而Writer可以直接输出字符串,这一点是方便的,所以很多人 ...

  6. Java基础 使用转换流进行文件的复制 / RandomAccessFile 类进行文件的复制

    笔记:  **使用转换流进行文件的复制 文本文件---字节流FileInputStream--> [InputStreamReader] -----字符流BufferedReader------ ...

  7. 24_IO_第24天(转换流、缓冲流)_讲义

    今日内容介绍 1.转换流 2.缓冲流 01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...

  8. 15、IO (转换流、缓冲流)

    转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的 ...

  9. 24_java之转换流和缓冲流

    01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指 ...

  10. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

随机推荐

  1. mysql_DML_select_聚合join

    聚合函数: select avg(salary)//平均值 from wsb; select sum(salary)//总和 from wsb; select max(salary)//最大 from ...

  2. day31—CSS Reset 与页面居中布局

    转行学开发,代码100天——2018-04-16 报名的网易前端开发课程今天正式开课了,这也是毕业后首次付费进行的正式培训课程学习.以此,记录每天学习内容. 今天学了两个方面的知识: 1. CSS   ...

  3. String中的CompareTo

    在API源码中,String的compareTo其实就是一次比较两个字符串的ASCII码.如果两个字符串的ASCII相等则继续后续比较,否则直接返回两个ASCII的差值.如果两个字符串完全一样,则返回 ...

  4. 让dcef3支持mp3和h.264 mp4解码播放

    嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件.CE ...

  5. js 数组相减 (一个数组去掉不符合条件的子数组)

    数组相减?我也希望将来在ES8或者更好js版本能带来数组之间相互运算的方法,但是现在不能,咱们只能靠已有的方法实现: var arr1 = [2,3,5,88,99,444,66],arr2 = [2 ...

  6. poj3126Prime Path (BFS+素数筛)

    素数筛:需要一个数组进行标记 最小的素数2,所有是2的倍数的数都是合数,对合数进行标记,然后找大于2的第一个非标记的数(肯定是素数),将其倍数进行标记,如此反复,若是找n以内的所有素数,只需要对[2, ...

  7. Gradient Descent with Momentum and Nesterov Momentum

    在Batch Gradient Descent及Mini-batch Gradient Descent, Stochastic Gradient Descent(SGD)算法中,每一步优化相对于之前的 ...

  8. PHP_CodeIgniter 细节

    下载压缩包解压之后, 可以在 application/config/config.php 中修改配置信息,包括编码,目录地址 web目录默认是system,后台目录默认是Application, 可以 ...

  9. CentOS安装Prolog和Erlang语言

    安装Erlang比较简单 下载Erlang的压缩包 输入tar -zxvf 压缩包 解压 进入解压的目录下 输入./configure 在./configure执行完成后,输入make 然后输入mak ...

  10. 《剑指offer》面试题9 斐波那契数列 Java版

    书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算. public long calculate(int n){ if(n<=0){ return 0; } if(n == 1){ r ...