一、处理流:

增强功能,提供性能,在节点流之上。

二、节点流与处理流的关系

节点流(字节流、字符流)处于IO操作的第一线,所有操作必须通过它们进行;

处理流可以对其他流进行处理(提高效率或操作灵活性)。

三、缓冲流

1、字节缓冲流

BufferedInputStream

BufferedOutputStream

package IOBuffer;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

/**

* 处理流(字节缓冲流)

* 字节流文件拷贝+缓冲流,提高性能

* 缓冲流(节点流)

*/

@SuppressWarnings("all")

public class Demo01 {

public static void main(String[] args) {

String srcPath = "G:/1314.jpg";

String destPath = "G:/try/520.jpg";

try {

copyFile(srcPath,destPath);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void copyFile(String srcPath,String destPath) throws IOException

{

//1、建立联系  源存在(且为文件)+目的地(文件可以不存在)

File src = new File(srcPath);

File dest = new File(destPath);

if(!src.isFile())

{

System.out.println("只能拷贝文件");

throw new IOException("只能拷贝文件");

}

//2、选择流 缓冲流(字节输入流)

InputStream is = new BufferedInputStream(new FileInputStream(src));

OutputStream os =new BufferedOutputStream(new FileOutputStream(dest)) ;

//3、文件拷贝  循环+读取+写出

byte[] flush = new byte[1024];

int len = 0;

while(-1!=(len = is.read(flush)))

{

//写出

os.write(flush,0,len);

}

os.flush();//强制刷出

//关闭流 先打开后关闭

os.close();

is.close();

}

}

2、字符缓冲流

BufferedReader  新增readLine()读取一个文本行。

BufferedWriter  新增newLine()写入一个行分隔符。

package IOBuffer;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

/**

*

* 字符缓冲流+新增方法(不能发生多态)

*/

public class Demo02 {

public static void main(String[] args) {

String srcPath = "G:/oo.txt";

String destPath = "G:/xx.txt";

//创建源

File src = new File(srcPath);

File dest = new File(destPath);

//选择流   缓冲流   如果后面要使用新增方法,就不能使用多态了。

//如果没有使用子类的新增方法,可以使用多态方式。

/*Reader reader = null;

Writer writer = null;

reader =new BufferedReader(new FileReader(src)) ;

writer = new BufferedWriter(new FileWriter(dest));

reader.read(flush)

writer.write(flush,0,len)*/

BufferedReader reader = null;

BufferedWriter writer = null;

try {

reader =new BufferedReader(new FileReader(src)) ;

writer = new BufferedWriter(new FileWriter(dest));

//读取操作

//新增方法操作的字符缓冲流

String line = null;//一行一行读取 BufferedReader新增readLine()

while(null!=(line = reader.readLine()))

{

writer.write(line);

//writer.append("\r\n");//换行符

writer.newLine();//换行符  新增方法

}

writer.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

System.out.println("文件不存在");

} catch (IOException e) {

e.printStackTrace();

}

finally

{

if(null!=reader)

{

try {

writer.close();

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

四、转换流

(一)字节流转换为字符流,处理乱码(编码集、解码集)

解码:二进制–>解码字符集–>字符

编码:字符–>编码字符集–>二进制

(二)为什么会出现乱码?

1、解码与MT4登录真实账户教程编码的字符集不统一

2、字节缺少,长度丢失

(三)文件乱码(通过转换流进行处理)

package IOConver;

import java.io.UnsupportedEncodingException;

public class Demo01 {

public static void main(String[] args) {

test01();

System.out.println("-----------");

test02();

}

//解码与编码字符集字符集必须相同

public static  void test01()

{

//解码byte-->char

String str = "中国";//UTF-8

//编码 char-->byte

byte[] data = str.getBytes();

//编码与解码的字符集统一

System.out.println(new String(data));

try {

data  = str.getBytes("gbk");//设定编码字符集    编码

//不统一字符集,出现乱码

System.out.println(new String(data));//解码

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

byte[] data2;

try {

//编码

data2 = "中国".getBytes("GBK");

//解码

str = new String(data2,"GBK");

//str = new String(data2);//不指定 默认解码UTF-8 会出现乱码

System.out.println(new String(str));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

//字节缺少,长度丢失

public static  void test02(){

String str = "中国";

byte[] data;

data = str.getBytes();//编码

//字节数不完整

System.out.println(new String(data,0,4));

}

}

运行结果:

�й�

中国

-----------

中�

package IOConver;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

/**

* 转换流:字节转为字符

* 1、输出流OutputStreamWriter  编码

* 2、输入流InputStreamReader  解码

*/

public class Demo02 {

public static void main(String[] args) throws IOException {

//输入文件  解码 (字节到字符)   读取  要显示

//指定解码字符集    BufferedReader字符流--InputStreamReader转换流--FileInputStream字节流

BufferedReader br = new BufferedReader

(

new InputStreamReader

(

new FileInputStream(new File("g:/writer.txt")),"UTF-8"

)

);//指定字符解码集

//写出文件     编码(字符到字节)

BufferedWriter bw = new BufferedWriter

(

new OutputStreamWriter

(

new FileOutputStream(new File("G:/try/abdec.txt")),"UTF-8"

)

);

String info = null;

while(null!=(info = br.readLine()))

{

System.out.println(info);

bw.write(info+"\r\n");

}

bw.flush();

bw.close();

br.close();

}

}

运行结果:

每个人都有青春,

每个青春都有一个故事,

每个故事都有一个遗憾,

每个遗憾却都存在着他的美好。ouye

————————————————

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/45932481

Java IO之处理流的更多相关文章

  1. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  2. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  3. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  4. [Java IO]03_字符流

    Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类.  它的定义如下: public abstra ...

  5. JAVA IO之管道流总结大全(转)

    要在文本框中显示控制台输出,我们必须用某种方法“截取”控制台流.换句话说,我们要有一种高效地读取写入到System.out和 System.err 所有内容的方法.如果你熟悉Java的管道流Piped ...

  6. java IO之 序列流 集合对象Properties 打印流 流对象

    序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...

  7. java io之管道流

    一.java.io中存在一中流叫管道流,类似管道的功能.PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流.这个两个流必须同时使用. 二.作用:进行两个线 ...

  8. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream

    目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...

  9. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

随机推荐

  1. 使用 jQuery 实现当前页面高亮显示的通栏导航条

    index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  2. 手写实现indexOf

    突然奇想.自己手写一个indexOf package com.toov5.test; public class Test8 { public static int find(String str1, ...

  3. js调用浏览器

    定义和用法 open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口. 语法 window.open(URL,name,specs,replace) 参数 说明 URL 可选.打开指定的页面 ...

  4. 【原理】scan

    SCAN 命令的保证(guarantees) 同一个元素可能会被返回多次. 处理重复元素的工作交由应用程序负责, 比如说, 可以考虑将迭代返回的元素仅仅用于可以安全地重复执行多次的操作上. 如果一个元 ...

  5. testNG之异常测试

    @Test(expectedExceptions = ) 在测试的时候,某些用例的输入条件,预期结果是代码抛出异常,那么这个时候就需要testNG的异常测试,先看一段会抛出异常的代码 exceptio ...

  6. sql server 基础语法2

    别名,选择,查询,排序,去重,筛选 select * from UserInfo as ui --起别名 select UserName,UserPwd --指定选择的列 from UserInfo ...

  7. NetHogs——Linux下按进程实时统计网络带宽利用率

    Debian/Ubuntu下安装很简单,执行:apt-get install nethogs 就可以安装. CentOS/RHEL下建议先安装上EPEL,再执行:yum install libpcap ...

  8. docker-compose快速搭建 Prometheus+Grafana监控系统

    一.说明Prometheus负责收集数据,Grafana负责展示数据.其中采用Prometheus 中的 Exporter含:1)Node Exporter,负责收集 host 硬件和操作系统数据.它 ...

  9. HSQL基本使用(linux),安装+Demo

    文章目录 下载 安装 运行 使用数据库 demo 注意 下载 http://sourceforge.net/projects/hsqldb/files/ 安装 将下载的包,解压到任意目录即可 运行 通 ...

  10. 02 java语言基础

    常量:字面值常量(字符串,字符,整数,小数,布尔,null),自定义常量,''这个不是字符常量,""这个是字符串常量 进制: 02.01_Java语言基础(常量的概述和使用) A: ...