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 ...
随机推荐
- linux定时任务之crontab
1.使用crontab crontab -u //设定某个用户的cron服务 crontab -l //列出某个用户cron服务的详细内容 crontab -r //删除某个用户的cron服务 cro ...
- JDK1.7新特性(4):java语言动态性之反射API
直接通过一个代码示例来熟悉java中通过反射来对构造函数/域以及方法处理的相关API: package com.rampage.jdk7.chapter2; import java.lang.refl ...
- CentOS下安装Redis(转载)
Redis是一个高性能的,开源key-value型数据库.是构建高性能,可扩展的Web应用的完美解决方案,可以内存存储亦可持久化存储.因为要使用跨进程,跨服务级别的数据缓存,在对比多个方案后,决定使用 ...
- 第7天:javascript-DOM 获取标签、注册事件改变属性的值、innerText、改变属性的值等
javascript WEB api------DOM document object model 案例 为元素注册点击事件,弹出对话框 <input type="button&quo ...
- Docker学习(一): 基本概念
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- 撩课-Java每天5道面试题第21天
136.请解释Spring Bean的生命周期? 首先说一下Servlet的生命周期: 实例化, 初始init, 接收请求service, 销毁destroy: Spring上下文中的Bean生命周期 ...
- hdu 1251 统计难题 字典树第一题。
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- [Code+#4]最短路
考虑xor运算的自反性 我们可以直接枚举二进制位异或来进行转移 这样边数大约是\(n \log n\)级别的 总复杂度\(\Theta((n\log n+m)\log n)\) #include&qu ...
- 使用laravel框架与phantomjs实现截屏功能
在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...
- Http请求超时的一种处理方法
URLConnection类常见的超时处理就是调用其setConnectTimeout和setReadTimeout方法: setConnectTimeout:设置连接主机超时(单位:毫秒) setR ...