Java IO流 --- 处理流
程序员文章站
2024-01-21 18:45:04
...
处理流 ---> 在节点流之上,用于增强功能,提高性能
1.缓冲流
字节流
BufferedInputStream
BufferedOutputStream
字符流
BufferedReader readline() 读取一行数据,返回一个字符串
BufferedWriter newline() 插入一个行分隔符
2.转换流 字节流转为字符流,处理乱码问题 编码集/解码集统一
编码与解码?
编码: 字符 --编码字符集-> 二进制数据
解码: 二进制数据 --解码字符集-> 字符
乱码原因?
1)当编码/解码字符集不一致时,便会出现乱码
2)字节数长度不够
缓冲流
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 缓冲流
字节流
BufferedInputStream
BufferedOutputStream
字符流
BufferedReader readline() 读取一行数据
BufferedWriter newline() 插入一个行分隔符
用法:在选择操作对应流时添加new Buffered***();
* @author Administrator
*
*/
public class BufferedStream {
public static void main(String[] args) {
}
/**
*
* @param scrPath 数据源对象
* @param destPath 拷贝目标对象
* @author Administrator 增加BufferedStream 提高性能
* @throws FileNotFoundException
* @throws IOException
*/
public static void copyFile(File src,File dest) throws FileNotFoundException,IOException {
if (!src.isFile()) {
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
//如果已存在dest文件夹,不能建立与文件夹同名的文件
if (dest.isDirectory()) {
System.out.println(dest.getAbsolutePath()+"不能建立与文件夹同名的文件");
throw new IOException(dest.getAbsolutePath()+"不能建立与文件夹同名的文件");
}
//选择流 添加缓冲流提高性
InputStream is = new BufferedInputStream(new FileInputStream(src));
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest));
//文件拷贝 读取+写入
byte[] flush = new byte[1024];//接收字节数组
int len = 0;//定义接收长度
//循环读取 每次读取长度len,有数据则循环读取,没有数据后结束循环
while(-1!=(len=is.read(flush))){
//写入 将字节数组flush从0写入
os.write(flush, 0, len);
}
os.flush();
//关闭流,先打开的后关闭
os.close();
is.close();
}
}
编码与解码
/**
* 编码与解码 (以程序为中心,人类能识别的字符--->解码)
* 编码: 字符 --编码字符集-> 二进制数据
解码: 二进制数据 --解码字符集-> 字符
* 乱码问题
* 1)当编码/解码字符集不一致时,便会出现乱码
2)字节数长度不够
* @author Administrator
*
*/
public class Convert {
public static void main(String[] args) {
String str = "中国";
byte[] data = str.getBytes();
System.out.println(new String(data, 0, 3));
}
/**
* 字节数长度不够 中国为4个字节,指定3个字节则会乱码
*/
public static void covert02() {
String str = "中国";
byte[] data = str.getBytes();
System.out.println(new String(data, 0, 3));
}
/**
* 编码/解码字符集不一致时,便会出现乱码
* @throws UnsupportedEncodingException
*/
public static void covert01() throws UnsupportedEncodingException {
//解码 byte ---> char
String str = "中国";//Gbk 平台默认集
//编码 char ---> byte
byte[] data = str.getBytes();
//编码与解码字符集统一则不会乱码
System.out.println(new String(data));
//更改编码字符集为UTF-8
data = str.getBytes("UTF-8");
//编码与解码字符集不统一则会乱码
System.out.println(new String(data));
//设定编码字符集为UTF-8
byte[] data2 = "中国".getBytes("UTF-8");
//设定解码字符集为UTF-8
str = new String(data2, "UTF-8");
System.out.println(str);
}
}
转换流
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
/**
* 转换流
* 字节流 ---> 字符流
* 输入流:InputStreamReader 解码
* 输出流:OutputStreamWriter 编码
* @author Administrator
*
*/
public class ConvertionStream {
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
//字符缓冲流
//指定解码字符集 需要与解码字符集一致!否则会乱码
BufferedReader br =new BufferedReader(
//转换流
new InputStreamReader(
//字节流
new FileInputStream(new File("D:/CER/img/test02.txt")),"UTF-8")
);
String info =null;
try {
while(null!=(info=br.readLine())){
System.out.println(info);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedWriter bw =new BufferedWriter(
//指定编码字符集
new OutputStreamWriter(
new FileOutputStream(new File("D:/CER/img/test03.txt")), "UTF-8")
);
try {
bw.write("中国");
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上一篇: Java IO 文件流