021.9 IO流 流总结
###################################################################################
IO流的规律总结:解决的问题,开发中具体使用哪个流对象的问题
1,明确数据源,数据目的
就是在明确要使用的IO体系。InputStream OutputStream Reader Writer
需求中做为源:意味着是读
使用:InputStream Reader
需求中做为目的:意味着是写
使用:OutputStream Writer
2,操作的数据是否是纯文本数据
是,字符流
否,字节流
是并且是源,使用Reader
是并且是目的,Writer
3,明确要操作的具体设备。每个设备都有对应的流对象
源设备:
硬盘:能操作File的流对象都是。File开头
键盘:System.in
内存:数组
网络:socket流
目的设备:
硬盘:能操作File的流对象都是。File开头
键盘:System.out
内存:数组
网络:socket流
4,是否需要额外的功能
是否需要高效:缓冲区,Buffered开头
是否需要编码转换:转换流
######################################################################################
需求1、通过键盘录入数据,保存到一个文件中
思路:1)明确源和目的,都有,源:IntputStream Reader 目的:OutputStream Writer
2)明确是否是文本,是文本,源:Reader 目的:Writer
3)具体设备:源:System.in 目的:硬盘
public static void main(String[] args) throws IOException
{
InputStream is = System.in;
FileWriter fw = new FileWriter("myfile\\a.txt");
byte[] by = new byte[1024];
int count = 0;
while((count = is.read(by))!=-1){
System.out.println(new String(by,0,count));
fw.write(new String(by), 0, count);
}
fw.close();
}
1.1
//但是麻烦,因为明确源是Reader,需要将字节流转成字符流,所以用InputStreamReader
public static void main(String[] args) throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("myfile\\a.txt",true);
char[] chr = new char[1024];
int count = 0;
while((count = isr.read(chr)) != -1){ //因为是键盘输入不会有末端。
String s = new String(chr,0,count);
System.out.println(s);
fw.write(s);
fw.flush();
}
fw.close();
}
1.2
//需要高效,加入缓冲区
public static void main(String[] args) throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
FileWriter fw = new FileWriter("myfile\\a.txt",true);
BufferedWriter bw = new BufferedWriter(fw);
String line = "";
while((line = br.readLine()) != null){ //因为是键盘输入不会有末端。
bw.write(line);
bw.newLine();
System.out.println(line);
bw.flush();
}
br.close();
bw.close();
}
1.3
###############################################################################################
需求2:读取文本文件,显示在控制台上
思路:1)明确源和目的,都有,源:IntputStream Reader 目的:OutputStream Writer
2)明确是否是文本,是文本,源:Reader 目的:Writer
3)具体设备:源:硬盘 目的:System.out
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("myfile\\a.txt");
OutputStream os = System.out;
char[] chr = new char[1024];
int count = 0;
while((count = fr.read(chr)) != -1){
String s = new String(chr,0,count);
byte[] by = s.getBytes(); //因为OutputStream用的是byte[],所以我转成byte类型
os.write(by);
}
System.out.println("//read over!");
}
2.1
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("myfile\\a.txt");
OutputStreamWriter osw = new OutputStreamWriter(System.out);
char[] chr = new char[1024];
int count = 0;
while((count = fr.read(chr)) != -1){
osw.write(chr,0,count); //没有显示在控制台上,需要flush一下
osw.flush();
} }
2.2
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("myfile\\a.txt");
BufferedReader br = new BufferedReader(fr);
OutputStreamWriter osw = new OutputStreamWriter(System.out);
BufferedWriter bw = new BufferedWriter(osw);
String line = "";
while((line = br.readLine()) != null){
bw.write(line);
// System.out.println(line);
}
}
2.3加入缓冲区
021.9 IO流 流总结的更多相关文章
- Java Io 字符流
Java Io 字符流包含: 1. InputStreamReader 它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite 它是char流到byt ...
- Java IO 嵌套流、文本的输入输出和存储
Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1. 组合流过滤器(嵌套流) a) 跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...
- Java IO 转换流 字节转字符流
Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...
- Java IO 过滤流 BufferedInput/OutputStream
Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...
- Java IO 节点流 FileInput/OutputStream
Java IO 节点流 FileInput/OutputStream @author ixenos 节点流之 文件流 文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容 1.文件的读 ...
- Java IO 理解流的概念
Java IO 理解流的概念 @author ixenos 在理解流时首先理解以下概念 1.流的来源和去向一般在构造器指出 2.方法中的形参一般是将流输出到某个位置,读取(INPUT)流从流读出数据( ...
- Java IO 节点流 ByteArrayInput/OutputStream
Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...
- IO 转换流
package TestIo; import java.io.*; /** * 转换流 */ public class TestConvertStream { public static void m ...
- IO缓冲流
目录 IO缓冲流 缓冲流 基本原理 字节缓冲流 字符缓冲流 IO缓冲流 缓冲流也叫高效流,能够更高效的进行读取: 转换流:能够进行编码转换 序列化流:持久化存储对象 缓冲流 缓冲流--就是对应4个Fi ...
- Java - IO 内存流和打印流
IO 内存流和打印流操作 字符编码 计算机中所有的信息组成都是二进制数据,所有能够描述的中文文字都是经过处理后的结果:所有的语言文字都会使用编码来进行描述,例如:ASCII码 常见编码 GBK/GB2 ...
随机推荐
- ACM,算法
ACM,算法 描述 最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道了第一个小光棍数是471,471的三次方是104487111,现在 ...
- tomcat主页打不开,tomcat manager 配置,Failed to start component [StandardEngine[Catalina].
Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Serv]] ...
- hadoop学习笔记(二):简单启动
一.hadoop组件依赖关系 二.hadoop日志格式: 两种日志,分别以out和log结尾: 1 以log结尾的日志:通过log4j日志记录格式进行记录的日志,采用日常滚动文件后缀策略来命名日志文件 ...
- RabbitMQ---9、消息确认机制(事务+Confirm)
转载至:https://blog.csdn.net/u013256816/article/details/55515234 参考资料:https://www.cnblogs.com/520playbo ...
- python学习之老男孩python全栈第九期_day026知识点总结——封装、property、类方法、初识反射
一. 封装 class Room: def __init__(self, name, length, width): self.__name = name self.__length = length ...
- 51Nod 算法马拉松23 开黑记
惨啊……虽然开了半天黑,但是还是被dalao们踩了…… 第二次开黑,还是被卡在rank20了,我好菜啊……= = 写一写比赛经过吧…… 看到题之后习惯性都打开,A~D看上去似乎并没有什么思路,F应该是 ...
- CSS3 教程
CSS3 教程 CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. 本教程向您讲解 CSS3 中的新特性. 开始学习 CSS3! 更多:http://www.runoob.com ...
- js解决千分符问题[收藏下]
//js数字千分符处理 function commafy(num) { num = num + ""; var re = /(-?\d+)(\d{3})/ while (re.te ...
- Install MySQL on Mac
1. 可参考此文章:http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html 2. 目前MySQL(我用的mysql 5 ...
- Java多线程学习笔记(三)同步和异步
首先是一段代码: public class HasSelfPrivateNum { public void addI(String username){ try { int num=0; if(use ...