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. 史上最强 AI 翻译诞生了!拳打谷歌,脚踢 DeepL

    CoT 推理范式 默认情况下,大语言模型通常是直接给出问题的最终答案,中间推理过程是隐含的.不透明的,无法发挥出大模型最极致的理解能力.如果你用它来充当翻译,可能效果和传统的机器翻译也差不了太多. 如 ...

  2. 找不到 .NETFramework,Version=v5.0 的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。

    找不到 .NETFramework,Version=v5.0 的引用程序集.要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序. visual studio 2019 ...

  3. 夜莺监控 v7.beta4 发版,仪表盘变量和业务组下的机器联动

    这个版本最大的改动,就是仪表盘变量和业务组下的机器联动.大家可以导入这个大盘做测试: https://github.com/ccfos/nightingale/blob/main/integratio ...

  4. ISCSI配置与挂载

    ISCSI介绍 iSCSI使用 TCP/IP 协议,来提供网络存储. 客户端挂载后,可以对其进行分区,进行格式化,就好像是安装在本机上的硬盘一样. 为了保证传输速率,通常采用光纤. 配置环境 Cent ...

  5. ZYNQ uboot 网络调试

    背景 使用 Vivado配置好网络,并在PetaLinux中构建了完整的uboot.kernel.rootfs以后,发现网络有问题. > ping 192.168.168.1 ethernet@ ...

  6. RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法

    在RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法如下: 常见原因 网络问题: 网络延迟或不稳定可能导致通信超时. 网络分区(network partition ...

  7. 机器学习(四)——Lasso线性回归预测构建分类模型(matlab)

    Lasso线性回归(Least Absolute Shrinkage and Selection Operator)是一种能够进行特征选择和正则化的线性回归方法.其重要的思想是L1正则化:其基本原理为 ...

  8. NXP i.MX 6ULL工业核心板规格书( ARM Cortex-A7,主频792MHz)

    1 核心板简介 创龙科技SOM-TLIMX6U是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的低成本工业级核心板,主频792MHz,通过邮票孔连接方式引出Eth ...

  9. sprak应用执行过程

  10. Java 面向对象编程之继承的super关键词

    java 继承里面的super关键词 super关键词 一个引用变量,用于引用父类对象 父类和子类都具有相同的命名属性,要调用父类中的属性时使用 super也是父类的构造函数,格式super(参数) ...