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 ...
随机推荐
- 深入redis内部--字典实现
redis的字典定义和实现在dict.h和dict.c文件中. 1.字典结构 typedef struct dict { dictType *type; //定义了字典需要的函数 void *priv ...
- [PY3]——IO——文件读写
文件打开和关闭 # 使用open 打开文件,返回时值是一个 File-like对象 f.open('/test/file') # 使用read读取文件 f.read( ) # 使用close关闭文件 ...
- 第一章:初识PHP
Web程序工作原理介绍? 工作方式? 浏览器首先向Web服务器发出请求,Web服务器对请求做出响应,将响应数据发送给客户端浏览器,通常是一个HTML文件,然后通过浏览器把HTML文件信息显示在屏幕上. ...
- 超赞的 Go 语言 INI 文件操作
灵活的数据源 不光光可以从文件读取配置,还支持 []byte 类型的纯数据读取和基于 io.ReadCloser 的流式读取. 多种格式兼容 各种文件种类的广泛支持,包括但不限于 my.cnf..gi ...
- 移动端使用的WebKit私有属性(转)
<!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title>无标 ...
- rust by example 2
本来这篇准备明天在写的,但正好今天的Release没出问题,就接着写吧 rust里的原生类型: 有符号整数: i8, i16, i32, i64和isize(指针大小) 无符号整数:u8, u16, ...
- MySQL---2、安装与部署
1.MySQL下载 MySQL版本的选择MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.MySQL Enterprise Edition 企业版本,需付费,可以 ...
- spring mongodb分页,动态条件、字段查询
使用MongRepository public interface VideoRepository extends MongoRepository<Video, String> { Vid ...
- 详解js闭包
https://segmentfault.com/a/1190000000652891 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的 ...
- 最全的HTTP 响应状态码列表!
摘要: HTTP状态码,我们要学会现查现用能记住最好. 简单举例几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.如果是做AJAX,RE ...