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. Asp.Net 单点登录(SSO)|禁止重复登陆|登录强制下线

    背景: 先上个图,看一下效果: SSO英文全称Single Sign On(单点登录).SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其 ...

  2. uni-app mpvue wepy websocket的介绍

    uni-app 网址:https://uniapp.dcloud.io/ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.H5.以 ...

  3. 剑指Offer-56.删除链表中重复的结点(C++/Java)

    题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 ...

  4. INFINI Labs 产品更新 | Easysearch 1.8.2 发布优化 CCR 性能

    INFINI Labs 产品又更新啦~,包括 Easysearch v1.8.0.Gateway.Console.Agent.Loadgen v1.25.0.本次各产品更新了很多亮点功能,如 Easy ...

  5. reactHooks的组件通信

    父组件调用子组件的方法 // 父组件 import React, { useEffect, useRef, useState } from 'react'; import StopModal from ...

  6. springboot增加@EnableAsync注解,否则方法中的@Async注解没有生效

    springboot增加@EnableAsync注解,否则方法中的@Async注解没有生效. @EnableFeignClients(basePackages = {"com.test&qu ...

  7. redhat6.5 升级 openssl

    上传版本包: openssl-1.0.1u.tar.gz 解压缩安装包: tar -xf openssl-1.0.1u.tar.gz 安装版本: ./config --prefix=/usr/loca ...

  8. 麒麟操作系统V10安装mysql8.0.26

    今年mysql装得有点多,大概有4次了,快变系统工程师了! 本文重点说下如何识别版本和配置服务! 首先两点: 1)麒麟本质是linux内核,所以基本上centos的操作在这里可以通用 2)虽然通用,但 ...

  9. 【动手学深度学习】第五章笔记:层与块、参数管理、自定义层、读写文件、GPU

    为了更好的阅读体验,请点击这里 由于本章内容比较少且以后很显然会经常回来翻,因此会写得比较详细. 5.1 层和块 事实证明,研究讨论"比单个层大"但"比整个模型小&quo ...

  10. arm linux 移植 iperf3

    背景 新做的硬件需要有进行一些板级接口测试:关于网络的测试很多时候只是停留在 ping 通:能够使用就算了.不知道网络的丢包率,也不知道网络吞吐的性能. 因此,需要使用一些专业化的工具来进行测试:查阅 ...