1.处理流
1)缓冲流
package buffered;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* 字符缓冲流
*
* @author Wang
*
*/
public class bufferChar {
public static void main(String[] args) {
//创建源 仅限于 字符的纯文本
File src =new File("F:/testIO/Demo03.java");
File dest =new File("F:/testIO/Demo03BufferCopy.java");
//选择流
BufferedReader reader =null;
BufferedWriter wr =null;
try {
reader =new BufferedReader(new FileReader(src)); //加入了缓冲流就是这里变为 BudderedReader();
wr =new BufferedWriter(new FileWriter(dest));
//读取操作
/*
char[] flush =new char[1024];
int len =0;
while(-1!=(len=reader.read(flush))){
wr.write(flush, 0, len);
}*/
//新增方法的操作
String line =null;
while(null!=(line=reader.readLine())){
wr.write(line);
//wr.append("\r\n");
wr.newLine(); //换行符号
}
wr.flush();//强制刷出
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("源文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取失败");
}finally{
try {
if (null != wr) {
wr.close();
}
} catch (Exception e2) {
}
try {
if (null != reader) {
reader.close();
}
} catch (Exception e2) {
}
}
}
}
2)转换流(处理乱码)
编码与解码的简单的示例:
package DecodeAndCode;
import java.io.UnsupportedEncodingException;
/**
*
* 探究文件的编码与解码来解决乱码的方式
* 乱码的两个原因
*
* @author Wang
*
*/
public class Demo01 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str ="中国"; //编码
byte[] data =str.getBytes(); // 解码
System.out.println(new String(data,0,3));//设置字节数为3 而中国是两个字 字符长度应该是4
}
public static void test01() throws UnsupportedEncodingException {
//解码 byte -->char
String str ="中国"; //这里会使用eclipse的默认编码字符集GBK来进行解码
//编码 char -->byte
byte[] data =str.getBytes(); //这里会使用eclipse的默认编码字符集GBK来进行编码
//编码与解码字符集同一
System.out.println(new String(data));
data =str.getBytes("utf-8"); //设定编码字符集 utf-8
//不同一出现乱码
System.out.println(new String(data));
//编码
byte[] data2 = "中国".getBytes("utf-8"); //设定编码字符集 utf-8
//解码
str=new String(data2,"utf-8"); //设定解码字符集 utf-8
System.out.println(str);
}
}
转换流: 只能字节转为字符
1、输出流 OutputStreamWriter -> 编码
2、输入流 InputStreamReader -> 解码
当你的源文件不是乱码 那么你用什么编码解码放过是都无所谓 只要二者一样就能输出你想要的文件
package DecodeAndCode;
import java.awt.image.BufferedImageFilter;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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;
/**
* 转换流: 字节转为字符
* 1、输出流 OutputStreamWriter -> 编码
* 2、输入流 InputStreamReader -> 解码
*
* 当你的源文件不是乱码 那么你用什么编码解码放过是都无所谓 只要二者一样就能输出你想要的文件
*
* @author Wang
*
*/
public class Demo02 {
public static void main(String[] args) throws IOException {
//指定解码字符集
BufferedReader br = new BufferedReader(
new InputStreamReader(
new BufferedInputStream(
new FileInputStream(
new File("F:/testIO/Demo03.java"))),"UTF-8") //utf-8 会乱码 解码字符集为GBK 解码方式为GBK就不会乱码
);
//写出文件 编码
BufferedWriter bw =new BufferedWriter(
new OutputStreamWriter(
new BufferedOutputStream(
new FileOutputStream(new File("F:/testIO/encode.java")))));
String info =null;
while(null!=(info=br.readLine())){
//System.out.println(info);
bw.write(info);
bw.newLine();
}
bw.flush();
bw.close();
br.close();
}
}
转换流的时候会有很多定义的嵌套;
总结一下:
注意:
节点流,处理流(字节缓冲,字符缓冲流)他要建立在节点流之上;
缓冲流就是这两句改变了:
reader =new BufferedReader(new FileReader(src)); //加入了缓冲流就是这里变为 BudderedReader();
wr =new BufferedWriter(new FileWriter(dest));
节点流一般建议加上缓冲流,提高性能;
查看一个文件的编码方式:可以文本方式打开然后另存为,会出现一个这样的界面如下图(应该可以清楚的看见文件的编码方式):
怎么查看eclipse的默认编码方式及设置编码方式:
Windows->Preferences->General就会出现如下界面:
你就应该可以看见左下角的默认编码方式为GBK,可以根据自己的意愿调节;
编码就是从字符变为二进制
解码就是从二进制变为字符
编码与解码是以人为中心的
乱码的两种原因:
1.就是编码的字符集不相同;
2.就是输出的字节长度不够: