Reader & Writter 只适合文本的输入输出 【.txt .java .c .cpp】

传输文件,不能使用文本IO进行读写,需要使用文件输入输出流

public class IOTest {
public static void main(String[] args) throws Exception {
// 文件输入输出 // 图片文件测试复制
File srcImg = new File("1774415.jpg");
// 新图片文件
File destImg = new File("new.jpg"); // 写入对象
InputStream inputStream = new FileInputStream(srcImg); // 写出对象
OutputStream outputStream = new FileOutputStream(destImg); // 缓冲字节数组
byte[] bytesBuffer = new byte[10];
// 返回个数
int len;
while ( (len = inputStream.read(bytesBuffer)) != -1){
// 写入数据
outputStream.write(bytesBuffer,0,len);
}
inputStream.close();
outputStream.close();
}
}

文件复制的方法封装

    static void fileCopy(String srcPath,String destPath){ // 文件复制的方法封装
File srcFile = new File(srcPath);
File destFile = new File(destPath);
InputStream inputStream = null;
OutputStream outputStream = null;
try{
inputStream = new FileInputStream(srcFile);
outputStream = new FileOutputStream(destFile);
byte[] bytesBuffer = new byte[1024]; //2的十次方
int length; // 当前读取个数
while ((length = inputStream.read(bytesBuffer)) != -1){
outputStream.write(bytesBuffer,0,length);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

缓冲流,提高文件读写效率

- BufferedInputStream

- BufferedOutputStream

- BufferedReader

- BufferedWritter

    static void bufferFileCopy(String srcPath,String destPath){ // 文件复制的方法封装
File srcFile = new File(srcPath);
File destFile = new File(destPath); InputStream inputStream = null;
OutputStream outputStream = null; InputStream bufferInput = null;
OutputStream bufferOutput = null; try{
inputStream = new FileInputStream(srcFile);
outputStream = new FileOutputStream(destFile); // 多添加一次缓冲流对象装载
bufferInput = new BufferedInputStream(inputStream);
bufferOutput = new BufferedOutputStream(outputStream); // 调用缓冲输入输出读写文件
byte[] bytesBuffer = new byte[1024]; //2的十次方
int length; // 当前读取个数
while ((length = bufferInput.read(bytesBuffer)) != -1){
bufferOutput.write(bytesBuffer,0,length);
          // bufferOutput.flush(); 刷新缓冲数组,但是write已经自带此方法了,所以不用再调用了
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
          // 先关闭缓冲输入输出对象
bufferInput.close();
bufferOutput.close();
// 在关闭文件输入输出对象 关闭外层流的同时,内存流也会被关闭,这一步可以省略
//outputStream.close();
//inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

- BufferedReader 和 BufferedWritter 也是一样套接实现的流对象上

    static void bufferFileCopy(String srcPath,String destPath){ // 文件复制的方法封装
File srcFile = new File(srcPath);
File destFile = new File(destPath); Reader reader = null;
Writer writer = null; BufferedReader bufferReader = null;
BufferedWriter bufferWriter = null; try{
reader = new FileReader(srcFile);
writer = new FileWriter(destFile); // 多添加一次缓冲流对象装载
bufferReader = new BufferedReader(reader);
bufferWriter = new BufferedWriter(writer); // 调用缓冲输入输出读写文件
/*byte[] bytesBuffer = new byte[1024]; //2的十次方
int length; // 当前读取个数
while ((length = bufferInput.read(bytesBuffer)) != -1){
bufferOutput.write(bytesBuffer,0,length);
}*/ // 采用String读取
String data;
while( (data = bufferReader.readLine()) != null){
System.out.println(data);
bufferWriter.write(data + "\n");// data 不包含换行字符 或者bufferWriter.newLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferReader.close();
bufferWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

转换流

- InputStreamReader 一个字节输入流 转换至 字符输入流

- OutputStreamWriter 一个字节输出流 转换至 字符输出流

解码 : 字节 字节数组 -> 字符串 字符数组

编码: 字符串 字符数组 -> 字节 字节数组

- 字符集问题  https://www.bilibili.com/video/BV12741127qm

ASCII 美国标准信息交换码,阿斯克码

GBK 中国中文编码表升级,兼容更多中文,原GB2312

Unicode 国际标准码

UTF-8 中英通用

    static void readFile(String srcPath) throws Exception {
File file = new File(srcPath);
InputStream inputStream = new FileInputStream(file);
InputStreamReader inputReader = new InputStreamReader(inputStream,"UTF-8");
// new InputStreamReader(inputStream, StandardCharsets.UTF_8);
// new InputStreamReader(inputStream, "UTF-8"); 一般不写字符集参数,默认使用系统字符集[文件创建时,设置的字符集]
char[] charsBuffer = new char[12];
int len;
while ((len = inputReader.read(charsBuffer)) != -1 ){
String str = new String(charsBuffer,0,len);
System.out.println(str);
}
inputReader.close();
}

文件字符转换的输入输出问题

    static void transFileCopy(String srcPath,String destPath) throws Exception {
// 创建文件、创建流对象
File srcFile = new File(srcPath);
File destFile = new File(destPath); InputStream inputStream = new FileInputStream(srcFile);
OutputStream outputStream = new FileOutputStream(destFile); InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"GBK"); // 读写过程
char[] charsBuffer = new char[10];
int len;
while ((len = inputStreamReader.read(charsBuffer)) != -1){
outputStreamWriter.write(charsBuffer,0,len);
} // 释放资源
inputStreamReader.close();
outputStreamWriter.close();
}

【Java】Input,Output,Stream I/O流 02 文件流 & 缓冲流的更多相关文章

  1. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  2. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  3. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  4. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  5. IO流(5)—缓冲流

    1.IO体系: 抽象基类--节点流(文件流)--缓冲流(处理流的一种) InputStream --FileInputStream--BufferedInputStream OutputStream- ...

  6. Java基础学习(六)-- 递归以及文件I/O流基础详解

    递归 1.递归的概念: 在函数自身内部,调用函数本身的方式,称为递归. 2.递归的注意事项:包括递进去,归出来两步.   即:首先依次执行[函数调自身语句]上半部分的代码,知道最里层.(递进去),然后 ...

  7. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

    [缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...

  8. Java之缓冲流(字节/字符缓冲流)

    概述 缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流: BufferedInputStream , BufferedOutputStrea ...

  9. java IO流 (四) 缓冲流的使用

    1.缓冲流涉及到的类: * BufferedInputStream* BufferedOutputStream* BufferedReader* BufferedWriter 2.作用:作用:提供流的 ...

  10. JAVA input/output 流层次关系图

    在java中,input和output流种类繁多,那么它们之间是否有关系呢?答案是肯定的,其中使用到了设计模式,装饰模式 下图来自于HEAD FIRST 设计模式 装饰模式一章 下图来自网络博客:ht ...

随机推荐

  1. Qt-ui的简单使用,常用控件(2)

    1  简介 本文主要介绍Qt ui界面的简单使用,介绍一些常用的控件. 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=22 2  常用控件 常用 ...

  2. LeetCode 719. 找出第 k 小的距离对 (Java)

    题目: 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入:nums = [1,3,1]k = 1输出:0 解释 ...

  3. ansible-role角色

    官网文档 https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html 为什么要用role 之前你部署的n ...

  4. 项目管理--PMBOK 读书笔记(7)【项目成本管理】

    1.成本术语: 2.三点估算(PERT): 平均估算值=(最可能持续时间*4+最乐观+最悲观)/6 标准差=(最乐观-最悲观)/6 68.26%.95.46%.99.73% 3.估算成本的工具:质量成 ...

  5. window10 java环境变量配置

    window10 此电脑 右击属性 相关设置 高级系统配置 点击右下的 环境变量 在系统变量中新增JAVA_HOME=D:\Program Files\Java\jdk1.8.0_25 在系统变量中修 ...

  6. AGC044C Strange Dance

    在2020年A卷省选day2t2有类似操作trie的技巧. 题目链接 显然是建一棵三叉trie树,代表0/1/2 对这棵trie树,我们需要支持子树交换和全局加1 考虑第一个操作怎么做?直接打个懒标记 ...

  7. C语言:if(0)之后的语句真的不会执行吗?

    C语言--if(0)之后的语句真的不会执行吗? 原文(有删改):https://www.cnblogs.com/CodeWorkerLiMing/p/14726960.html 前言 学过c语言的都知 ...

  8. 案例源码公开!分享瑞芯微RK3568J与FPGA的PCIe通信案例,嵌入式必读!

    ​ ARM + FPGA架构有何种优势 近年来,随着中国新基建.中国制造2025的持续推进,单ARM处理器越来越难满足工业现场的功能要求,特别是能源电力.工业控制.智慧医疗等行业通常需要ARM + F ...

  9. 都是全志T113处理器,“-i”和“-S3”有什么区别?

    自9个月前,创龙科技"1片含税就79元"的全志T113-i双核ARM Cortex-A7@1.2GHz的工业核心板(SOM-TLT113)推出之后,不少嵌入式软硬件工程师.用户都咨 ...

  10. CentOS7源码安装Python3

    一.先安装python3所依赖的软件包,非常重要(否则可能会出现python3安装成功,却缺少相应的pip) [root@centos src]# yum groupinstall "Dev ...