###################################################################################
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. SpringCloud - 2. 服务注册 和 发现

    SpringCloud 的服务注册和发现是由Eureka来完成. 1.eureka server 1.1 依赖 <dependency> <groupId>org.spring ...

  2. 0.ECMAScript 6 简介

    ECMAScript 6简介 ECMAScript 6 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目 ...

  3. C# 核心语法-反射(反射类型、方法、构造函数、属性,实现可配置可扩展,完成数据库访问类反射封装)

    反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使 ...

  4. Mac下PHP+Apache+MySQL环境搭建

    一.启动Apache 有两种方法 1.打开网络共享 打开"系统偏好设置"->"共享",在"互联网共享"那一项前面打√. 2.打开终端, ...

  5. js弹出遮层

    <script> var docEle = function () { return document.getElementById(arguments[0]) || false; } f ...

  6. 经典的SQL面试题及答案

    ​ ​ ​ ​ ​ ​​​​​ ​ ​​​​​​​​

  7. Java新人拿到一台新的电脑需要装配什么

    适用对象:新手 装备:win10 一.IDEA 插件等 说明 其他 TranslationPlugin 翻译插件 GitHub地址 MyBatis-Generator 自动生成Mybatis文件 Al ...

  8. 安装并使用Oracle SQL Developer访问Oracle

    ---问题 如何安装并使用Oracle SQL Developer访问Oracle. ---步骤 Oracle SQL Developer是Oracle官方出品的免费图形化开发工具,相对SQL*Plu ...

  9. For循环中由于ajax异步导致的问题解决(增加alert数据正常,去掉alert之后数据错误)

    由于ajax异步请求的机制,for循环运行不会等内部ajax请求结束,而直接循环到最后.解决方法:将for循环里面的请求单独封装一个方法. 个人遇到的问题具体如下 下面这段代码,如果第5行studat ...

  10. git杂记-打标签

    列出标签 $ git tag v0. v1. 创建标签 --添加附注标签(推荐):加上-a选项(annotated) $ git tag -a v1. -m 'my version 1.4' --添加 ...