###################################################################################
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流 流总结的更多相关文章

  1. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  2. Java IO 嵌套流、文本的输入输出和存储

    Java IO 嵌套流.文本的输入输出和存储 @author ixenos 1.   组合流过滤器(嵌套流) a)    跨平台文件分割符:常量字符串 java.io.File.seperator 等 ...

  3. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  4. Java IO 过滤流 BufferedInput/OutputStream

    Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...

  5. Java IO 节点流 FileInput/OutputStream

    Java IO 节点流 FileInput/OutputStream @author ixenos 节点流之 文件流 文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容 1.文件的读 ...

  6. Java IO 理解流的概念

    Java IO 理解流的概念 @author ixenos 在理解流时首先理解以下概念 1.流的来源和去向一般在构造器指出 2.方法中的形参一般是将流输出到某个位置,读取(INPUT)流从流读出数据( ...

  7. Java IO 节点流 ByteArrayInput/OutputStream

    Java IO 节点流 ByteArrayInput/OutputStream @author ixenos ByteArrayInputStream 包含一个内部缓冲区(字节数组byte[]),该缓 ...

  8. IO 转换流

    package TestIo; import java.io.*; /** * 转换流 */ public class TestConvertStream { public static void m ...

  9. IO缓冲流

    目录 IO缓冲流 缓冲流 基本原理 字节缓冲流 字符缓冲流 IO缓冲流 缓冲流也叫高效流,能够更高效的进行读取: 转换流:能够进行编码转换 序列化流:持久化存储对象 缓冲流 缓冲流--就是对应4个Fi ...

  10. Java - IO 内存流和打印流

    IO 内存流和打印流操作 字符编码 计算机中所有的信息组成都是二进制数据,所有能够描述的中文文字都是经过处理后的结果:所有的语言文字都会使用编码来进行描述,例如:ASCII码 常见编码 GBK/GB2 ...

随机推荐

  1. NSSM - the Non-Sucking Service Manager

    nssm is a service helper which doesn't suck. srvany and other service helper programs suck because t ...

  2. Python 获取Kmeans聚类结果每一类的数据

    获取聚类结果中每一类的数据,该数据类型是DataFrame 思路:获取clf_KMeans的标签,我这里是聚三类,标签就是0,1,2 将Label转成Series类型,再筛选出指定标签的res0,我筛 ...

  3. 注解完成spring json返回数据格式配置

    import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.module.Simp ...

  4. HTTP的response code 1xx,2xx,3xx,4xx,5xx分别代表什么

    HTTP 状态码点击链接可了解详情.您也可以访问 HTTP 状态码上的 W3C 页获取更多信息. 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态码. 2xx (成功):表示成功处理了请 ...

  5. 使用dom4j写xml文件——源码

    1 dom4j下载与配置 1.1 dom4j下载 请移步下载链接 1.2 maven依赖 <dependency> <groupId>org.dom4j</groupId ...

  6. Java基础——面向对象

    Hello 大家好,我又来啦,今天我们来说说Java的面向对象. 还记得之前去面试几家公司的实习生职位,大部分面试官都问过我有关面向对象 的问题,不知道以后还会不会问,估计是不会了吧...(:3[▓▓ ...

  7. bnu 29378 Adidas vs Adivon 基础题

    Adidas vs Adivon Time Limit: 1000ms Memory Limit: 65536KB   64-bit integer IO format: %lld      Java ...

  8. centos 安装cloud foundry CLI

    步骤: 1.wget -O /etc/yum.repos.d/cloudfoundry-cli.repo https://packages.cloudfoundry.org/fedora/cloudf ...

  9. RN canvas画布大小之谜

    一.需求 在一个高640.宽360的canvas内画一些坐标点. 二.问题 坐标点只显示了一部分,剩下的点没显示(其坐标属于(640,360)区域). 三.原因 canvas默认的画布大小是高150, ...

  10. HTML标签类型

    标签分类: 一.块标签:块标签是指本身属性为display:block;的元素. 1.默认占一行可以设置宽高, 2.在不设置宽度的情况下,块级元素的宽度是它父级元素内容的宽度 3.在不设置高度的情况下 ...