基类文件流 的使用

开始   2018年8月10日16:37:41

结束   2018年8月10日18:24:19

package 面向对象;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;public class readfile {public static void main(String[] args) throws IOException {// 注释中的是用字节流FileInputStream读取文件
//      FileInputStream fis=null;
//
//          //创建字节输出流
//          fis=new FileInputStream("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/a.txt");
//
//          byte[] b=new byte[1024];
//          int hasread=0;
//          while((hasread=fis.read(b))!=-1)
//          {
//              System.out.println(new String(b,0,hasread));
//
//
//      }
//  }
//
//      下面是用FileReader读取文件FileReader fis=null;fis=new FileReader("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/a.txt");int length=0;char[] b=new char[3];
//      read方法返回的是数组长度
//      FileInputStream和FileReader进行文件的读写并没有什么区别,只是操作单元不同而且。FileInputStream和FileReader进行文件的读写并没有什么区别,只是操作单元不同
//      特别注意不能用int数组接收字符流所以二者的数组类型不一样while((length=fis.read(b))!=-1){System.out.println(length);
//          System.out.println(new String(b,0,length));}fis.close();}}

思维导图

这是文件的读取  FileInputStream和FileReader用法基本相同

同理                    FileOuputStrewam和FileWriter也基本相同 (接收数组不同 字节流与字符流的区别) 如下例

package 面向对象;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;public class readfile {public static void main(String[] args) throws IOException {FileInputStream fis=null;FileOutputStream fos=null;
//     创建字节输入流和输出流 文件不存在会自定创建fis=new FileInputStream("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/a.txt");fos=new FileOutputStream("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/c.txt");byte[] b=new byte[1024];int length=0;
//     循环读取数据while((length=fis.read(b))!=-1){
//       把读取到的数据写入文件输出流fos.write(b);}fis.close();fos.close();}}

缓冲流

public static void main(String[] args) throws Exception {FileReader fr = new FileReader("C:/Users/Mrzhang/javaEE/基础课/javaSE-30/a.txt");BufferedReader bufr = new BufferedReader(fr);String line = null;while((line = bufr.readLine()) != null) {System.out.println(line);}fr.close();bufr.close();}

字符缓冲流:
  1: BufferedReader: 带有缓冲区的字符输入流。 
   特点: 
   (1)自带缓冲区  就是提高了效率。
   (2)readLine() 一次读取一行。 
   
   构造器: 
    new BufferedReader(Reader reader);//使用该缓冲流,需要先准备一个reader类的实现类对象。 
    
 API方法: 
    readLine(); 一次读取一行的方法。 
    
  2: BufferedWriter: 带有缓冲区的字符输出流 
  特点: 
   (1)带有缓冲区, 就是提高了效率。
   (2)newLine()  ; 提供了换行符 新方法。  \r\n
   
  BufferedReader : readLine方法, 一次读取一行数据。 
 
  readLine:原理: 
    一次读取一行数据,本质上,调用了FileReader类 read();方法 一次读取一个字符。 
    当读取单换行符号的时候,将整行的数据返回到内存。 
 
 //自定义一个带有缓冲区的类,提供一个方法, 一次读取一行。  模拟: BufferedReader类。
 
  对某个类的某个方法进行功能性的增强。可以使用装饰设计模式。 带有缓冲区的字节读取流:
     带有缓冲区的字节输入流:    BufferedInputStream
     特点: 
        (1)提供了一个缓冲区, 提高了字节的读的效率。  
     
  
    带有缓冲区的字节输出流。   BufferedOutputStream
      (1)提供了一个缓冲区,提高了字节的写的效率。 
   
   
 总结: 实现一个文件的copy  到底使用什么流? 
  (1)分析: 操作的对象,是字符还是字节。 
                        明确使用的流对象。
                        
  (2)明确来源:  文件, 键盘录入。 
            明确目的:  文件, 控制台。 
            
 (3)是否需要提高效率, 使用带有缓冲区的流对其进行包装。

public class MediaCopy {public static void main(String[] args) {long start= System.currentTimeMillis(); BufferedInputStream bis= null; BufferedOutputStream bos=null; //初始化: try {bis= new BufferedInputStream(new FileInputStream("C:/Users/Mrzhang/javaEE/HTML-06/CSS-01/(一)css样式表.wmv"));bos= new BufferedOutputStream(new FileOutputStream("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-32/copy.wmv"));int num=0; while((num=bis.read())!=-1){bos.write(num); }} catch (IOException e) {e.printStackTrace();} finally{if(bis!=null){try {bis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(bos!=null){try {bos.close();} catch (IOException e) {e.printStackTrace();}}}long end= System.currentTimeMillis(); System.out.println("消耗的时间:"+(end-start));// 86,612,0 82.5}
}

视频都等多媒体文件 的读取用字节流

转换流的使用

nputStreamReader  

       作用: 可以将一个字节流转换成一个字符流。 
       构造器: 
        new InputStreamReader(InputStream in ); 将一个字节流转换成一个字符流。 
        new InputStreamReader(InputStream in, String charsetName) 流进行转换的时候,可以指定字符集。。
    
   OutputStreamWriter: 
           作用: 将一个字节输出流转换成一个字符输出流
        new OutputStreamWriter(OutputStream out ); 将一个字节流转换成一个字符流。 
        new OutputStreamWriter(OutputStream in, String charsetName) 流进行转换的时候,可以指定字符集。

import java.io.IOException;
import java.io.InputStream;/** 演示System.in* 模拟了键盘录入: *   每次可以读取一行的数据。  *   当读取到换行符号的时候, 这一行返回。 *   定义一个结束标志。  当录入over的时候,键盘录入结束。 *   *   一次读取一个字节。 *  -------*   一次读取一行数据。   BufferedReader 类: (1)带有缓冲区。 (2)提供了一个新的方法: readLine(); 一次读取一行数据。  *   */
public class ReadIn {public static void main(String[] args) throws IOException {InputStream in= System.in; // 调用方法: //int num= in.read(); //一次读取一个字节。-1//定义一个容器: StringBuilder sb= new StringBuilder(); while(true){int ch= in.read();if(ch==13){continue; }if(ch==10){String s= sb.toString(); //sb当中的内容转换成字符串。 //定义一个结束标志: if("over".equals(s)){break; }System.out.println(s.toUpperCase());//读取完成一行,将一行的数据 转换成大写。 //              sb= new StringBuilder(); //创建很多对象。 sb.delete(0, sb.length()); }elsesb.append((char)ch); }/*int num1= in.read();int num2= in.read();int num3= in.read();int num4= in.read();System.out.println((char)num);System.out.println((char)num1);System.out.println(num2);// 13 /rSystem.out.println(num3);// 10 /n
*/  }
}   

           最下面的部分是一般低效的方法

上面代码是默认的来源目的(键盘和显示屏)

下面示例 用system方法改变来源和目的

public class ReadIn02 {public static void main(String[] args) throws IOException {
//      method_01(); //键盘录入的方式二: BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));String str= bufr.readLine();// System.out.println(str.toUpperCase());//     模拟了键盘输出。 OutputStream out = System.out; // PrintStream ----》OutputStream
//      out.writer(); 写的字节  向控制台输出的内容都是字符。 //将字节流-0--->字符流输出。 /*OutputStreamWriter  osw= new OutputStreamWriter(out); //将一个字节输出流转换成一个字符输出流。  osw.write(str); osw.flush(); osw.close(); */PrintStream ps= System.out; //打印流。 ps.println(str); //换行。}public static void method_01() throws IOException {// 一次读取一行数据。   BufferedReader 类: (1)带有缓冲区。 (2)提供了一个新的方法: readLine(); 一次读取一行数据。  InputStream in = System.in; // 一个字节流。 //能否将一个字节流 ---->字符流?  // 转换流: 桥接流: InputStreamReader isr= new InputStreamReader(in); BufferedReader  bufr= new  BufferedReader(isr); //bufr对象存在。 readLine方法。 String line= null; while((line=bufr.readLine())!=null){if("886".equals(line)){break; }System.out.println(line.toUpperCase());}bufr.close();}}

一:System类当中的方法: 
    System.in;  标准的输入流: 默认是键盘录入
    System.out; 标准的输出流: 默认是输出到控制台。 
  
    System.setIn(InputStream in); 改变来源。 
    System.setOut(PrintStream ps);  改变目的
    
    补充: 打印流:           
   PrintStream  构造器: 
   new PrintStream(String fileName);
   new PrintStream(OutputStream out); 
   
  PrintStream: 打印流(补充)

特点: 
   (1)能够打印基本数据类型的值。 
   (2)PrintStream 永远不会抛出 IOException;
   (3)写入 byte 数组之后自动调用 flush 方法。自动刷新。
   (4)println(); 提供了换行的方法。 
  构造器: 
    PrintStream(File file) 
          创建具有指定文件且不带自动行刷新的新打印流。 
    PrintStream(File file, String csn)  
  
   PrintStream(OutputStream out) ; 
   PrintStream(OutputStream out, boolean autoFlush) ;自动刷新。 
   PrintStream(String fileName) 
   
 //使用PrintStream类,将异常信息打印在外部文件当中。

2018年7月22日18:01:56 于易动

博客写太长的话一定要记得保存
不然今天下午写了一下午的博客  哎  又重写了一遍

远远没有第一遍写一边运行一遍写的流畅 +  注释详细

吸取教训~~!!!!!!!

思维导图-------java-IO流知识结构梳理相关推荐

  1. 思维导图系列之MySQL知识梳理

    上一系列:思维导图系列之Redis知识梳理 从MySQL的基础.存储引擎.索引.锁.事务.分库分表.性能分析.使用规范及优化方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短 ...

  2. 思维导图系列之Redis知识梳理

    从Redis的基础.分布式锁.缓存雪崩.缓存击穿.缓存穿透.持久化.高可用.内存淘汰机制等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短的时间内掌握Redis的主要知识 ...

  3. 思维导图Java篇(一)

    思维导图Java篇(一) 思维导图Java篇(二) 思维导图Java篇(三) 思维导图Java篇(四) 思维导图Java篇(五) 思维导图Java篇(六) 思维导图Java篇(一)

  4. 数据结构思维导图——Java版

    数据结构思维导图--Java版

  5. java基础入门第二版思维导图,Java 学习--你应该有份思维导图了(基础篇)

    每一门知识,除了理解它的一些原理用法之外,我觉得还有一点比较重要,那就是多整理笔记做总结. 以下是我自己亲自整理的关于 Java 学习的思维导图,分享出来希望能对大家在学习 Java 过程中有所帮助, ...

  6. 【思维导图】统计学知识大梳理

    统计学(statistics):****收集.处理.分析.解释数据并从数据中得出结论的科学. 描述统计(descriptive statistics):研究数据收集.处理和描述的统计学方法. 推断统计 ...

  7. 思维导图系列之Java集合知识梳理

    上一系列: 思维导图系列之Java多线程知识梳理 从集合的继承关系.实现方式.集合之间的相同点和不同点等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短的时间内掌握集合的主 ...

  8. 思维导图系列之Java多线程知识梳理

    上一系列:思维导图系列之MySQL知识梳理 从多线程的基础.线程同步.线程间通信.线程调度.线程池.并发容器.线程安全的集合.原子变量等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理 ...

  9. Java知识汇总——思维导图

    Java知识汇总--思维导图 Java知识点汇总,从基础到常用的API.还有常用的集合类,总结的很详细.图片是从论坛里面找到的,整理下来以便常复习.这是目前看到的比较详细完整的思维导图. 1.Java ...

  10. Java简单思维导图

    Java简单思维导图 Java 集合:List, Map, Tree 多线程:工具,锁 IO:BIO,NIO,AIO,Netty 设计模式 单例,简单工程,工厂,抽象工厂 build,装饰,obser ...

最新文章

  1. sendStickyBroadcast和sendStickyOrderedBroadcast
  2. GPU — 体系结构
  3. Linux网络状态工具ss命令操作详解
  4. Linux运维趋势采摘 -14期 【第一次编辑】
  5. how about one resource file has two different methods both annotated with @Post
  6. RocketMQ源码解析-Consumer启动(2)
  7. 创意合成大片欣赏,进步都是从模仿开始
  8. Vim 使用教程(搬运)
  9. 如何获取 WebAssembly 代码
  10. 正则表达式re.S的用法
  11. 天时、地利、人和,技术成熟推动闪存联盟2.0落地
  12. textarea的不可拉伸和不可编辑
  13. cad页面布局快捷键_cad布局窗口快捷键
  14. 通过企业微信服务端API接口进行群发应用消息
  15. python小波分解相关
  16. 博世传感器调试笔记(二)加速度及陀螺仪传感器BMI160
  17. 传输层协议、应用层协议
  18. matlab newton method,matlab Newton method
  19. IOS 安卓双平台视频APP推荐-VIP
  20. ffmpeg裁剪视频尺寸

热门文章

  1. 期权激励的核心价值是:激励能人,一起和公司共同成长,实现利益共享,有钱大家一起赚(转)...
  2. python笔记--运算符整除/取余/除法小技巧(7.15)
  3. 掌握14种UML图,清晰图示
  4. 打工仔的难处却得到了老板的面子
  5. fedora配置阿里云镜像
  6. 量子计算:下一个大风口,还是一个热炒概念?
  7. 10大免费FLV播放器下载(转)
  8. [滴滴笔试]java岗
  9. 【Unity】游戏寻路系统—NavMesh入门(个人翻译)
  10. mysql导入sql文件报错1067_导入数据库备份报错1067 – Invalid default value for ‘create_time’...