思维导图-------java-IO流知识结构梳理
基类文件流 的使用
开始 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流知识结构梳理相关推荐
- 思维导图系列之MySQL知识梳理
上一系列:思维导图系列之Redis知识梳理 从MySQL的基础.存储引擎.索引.锁.事务.分库分表.性能分析.使用规范及优化方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短 ...
- 思维导图系列之Redis知识梳理
从Redis的基础.分布式锁.缓存雪崩.缓存击穿.缓存穿透.持久化.高可用.内存淘汰机制等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短的时间内掌握Redis的主要知识 ...
- 思维导图Java篇(一)
思维导图Java篇(一) 思维导图Java篇(二) 思维导图Java篇(三) 思维导图Java篇(四) 思维导图Java篇(五) 思维导图Java篇(六) 思维导图Java篇(一)
- 数据结构思维导图——Java版
数据结构思维导图--Java版
- java基础入门第二版思维导图,Java 学习--你应该有份思维导图了(基础篇)
每一门知识,除了理解它的一些原理用法之外,我觉得还有一点比较重要,那就是多整理笔记做总结. 以下是我自己亲自整理的关于 Java 学习的思维导图,分享出来希望能对大家在学习 Java 过程中有所帮助, ...
- 【思维导图】统计学知识大梳理
统计学(statistics):****收集.处理.分析.解释数据并从数据中得出结论的科学. 描述统计(descriptive statistics):研究数据收集.处理和描述的统计学方法. 推断统计 ...
- 思维导图系列之Java集合知识梳理
上一系列: 思维导图系列之Java多线程知识梳理 从集合的继承关系.实现方式.集合之间的相同点和不同点等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短的时间内掌握集合的主 ...
- 思维导图系列之Java多线程知识梳理
上一系列:思维导图系列之MySQL知识梳理 从多线程的基础.线程同步.线程间通信.线程调度.线程池.并发容器.线程安全的集合.原子变量等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理 ...
- Java知识汇总——思维导图
Java知识汇总--思维导图 Java知识点汇总,从基础到常用的API.还有常用的集合类,总结的很详细.图片是从论坛里面找到的,整理下来以便常复习.这是目前看到的比较详细完整的思维导图. 1.Java ...
- Java简单思维导图
Java简单思维导图 Java 集合:List, Map, Tree 多线程:工具,锁 IO:BIO,NIO,AIO,Netty 设计模式 单例,简单工程,工厂,抽象工厂 build,装饰,obser ...
最新文章
- sendStickyBroadcast和sendStickyOrderedBroadcast
- GPU — 体系结构
- Linux网络状态工具ss命令操作详解
- Linux运维趋势采摘 -14期 【第一次编辑】
- how about one resource file has two different methods both annotated with @Post
- RocketMQ源码解析-Consumer启动(2)
- 创意合成大片欣赏,进步都是从模仿开始
- Vim 使用教程(搬运)
- 如何获取 WebAssembly 代码
- 正则表达式re.S的用法
- 天时、地利、人和,技术成熟推动闪存联盟2.0落地
- textarea的不可拉伸和不可编辑
- cad页面布局快捷键_cad布局窗口快捷键
- 通过企业微信服务端API接口进行群发应用消息
- python小波分解相关
- 博世传感器调试笔记(二)加速度及陀螺仪传感器BMI160
- 传输层协议、应用层协议
- matlab newton method,matlab Newton method
- IOS 安卓双平台视频APP推荐-VIP
- ffmpeg裁剪视频尺寸
热门文章
- 期权激励的核心价值是:激励能人,一起和公司共同成长,实现利益共享,有钱大家一起赚(转)...
- python笔记--运算符整除/取余/除法小技巧(7.15)
- 掌握14种UML图,清晰图示
- 打工仔的难处却得到了老板的面子
- fedora配置阿里云镜像
- 量子计算:下一个大风口,还是一个热炒概念?
- 10大免费FLV播放器下载(转)
- [滴滴笔试]java岗
- 【Unity】游戏寻路系统—NavMesh入门(个人翻译)
- mysql导入sql文件报错1067_导入数据库备份报错1067 – Invalid default value for ‘create_time’...