【Java】Input,Output,Stream I/O流 02 文件流 & 缓冲流
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 文件流 & 缓冲流的更多相关文章
- File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?
重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
- IO流(5)—缓冲流
1.IO体系: 抽象基类--节点流(文件流)--缓冲流(处理流的一种) InputStream --FileInputStream--BufferedInputStream OutputStream- ...
- Java基础学习(六)-- 递归以及文件I/O流基础详解
递归 1.递归的概念: 在函数自身内部,调用函数本身的方式,称为递归. 2.递归的注意事项:包括递进去,归出来两步. 即:首先依次执行[函数调自身语句]上半部分的代码,知道最里层.(递进去),然后 ...
- 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
[缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...
- Java之缓冲流(字节/字符缓冲流)
概述 缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流: BufferedInputStream , BufferedOutputStrea ...
- java IO流 (四) 缓冲流的使用
1.缓冲流涉及到的类: * BufferedInputStream* BufferedOutputStream* BufferedReader* BufferedWriter 2.作用:作用:提供流的 ...
- JAVA input/output 流层次关系图
在java中,input和output流种类繁多,那么它们之间是否有关系呢?答案是肯定的,其中使用到了设计模式,装饰模式 下图来自于HEAD FIRST 设计模式 装饰模式一章 下图来自网络博客:ht ...
随机推荐
- Windows下cmd命令行sftp上传至Linux服务器
1.Windows+R进入运行 2.输入cmd,进入命令行 3.命令建立连接 sftp 用户名@ip地址 例如: 输入密码,即可建立连接 上传方式: 1)直接拖动文件到命令行窗口,可以直接显示该文件的 ...
- C#.NET6 ASP.NET CORE MVC 获取客户端IP
重点是拿到HttpContext 对象. 先从Headers["Cdn-Src-Ip"] 中取IP,其次从Headers["X-Forwarded-For"] ...
- python 日志写入文件,参数说明及动态判断文件是创建还是追加
import logging import os ''' 格式符 含义 %(levername)s 日志级别名称 %(pathname)s 当前执行程序的路径(即脚本所在的位置) %(filename ...
- spark读取写入jdbc.,Caused by: java.lang.NoSuchMethodException: org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.<init>()
df.write .option("truncate", "true") .option("driver", mysqlDriver) .m ...
- P2467 [SDOI2010] 地精部落 学习笔记
DP 显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了 发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度\(j\)的答案,然 ...
- Xilinx SDK 开发Linux APP
Xilinx SDK 开发Linux APP 步骤 配置环境变量 将工具链需要的程序的所在目录添加到 系统环境变量中,例如: D:\Xilinx_201803\SDK\2018.3\gnu\micro ...
- uniapp+thinkphp5实现微信扫码支付(APP支付)
前言 统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口.下面介绍的是其中APP的支付的配置与实现流程 配置 1.首先登录 ...
- SpringBoot集成Knife4j
Knife4j简介 Knife4j 官网地址:https://doc.xiaominfo.com/ knife4j 是为Java MVC框架集成Swagger生成Api文档的增强解决方案. Knife ...
- Java List对象分组
实体类 必须重写equals和hashCode方法 package com.zcsoft.rc.backend.biz.vo.securityLibary; import java.util.Date ...
- Linux 更新网络时间
下载包 yum install -y ntpdate 同步网络时间 ntpdate 0.asia.pool.ntp.org 若上面的时间服务器不可用,也可以改用如下服务器进行同步: time.nist ...