代码:
package outIn2.review;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
/*
* CharacterCodingTransform-字符编码转换
* I/O练习,关流的事就免了。
*/
public class CharacterCodingTransform {
public static void main(String[] args) {
try {
// fileReaderDecoding1();
// fileReaderDecoding2();
// specialDecoding1();
encoding();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* encoding-编码
* 注意:
* 读数据的时候可以不关流,
* 也会有数据显示。
* 但是写入数据的时候要关流,
* 才可以把数据写入磁盘,
* 缓冲流只要刷新流就可以了,
* 建议是流就关闭。
*/
public static void encoding() throws Exception {
/*
* 采用FileWriter以默认方式编码,
* --如果流没有关闭,那么数据就会保存在流中。
* FileOutputStream+默认编码表
*/
FileWriter fw = new FileWriter("d:/ex/a/fileWriter01.txt");
fw.write("每天进步一点点。。。");
fw.close();
FileOutputStream fout = new FileOutputStream("d:/ex/a/fileWriter02.txt");
fout.write(123456789);// 只能写一个数
/*
* 采用转换流以默认方式编码
* OutputStreamWriter + FileOutputStream + 默认编码表
*/
OutputStreamWriter outW = new OutputStreamWriter(new FileOutputStream(
"d:/ex/a/outputStreamWriter03.txt"));
outW.write("天天一道水题。。");
outW.close();
/*
* 采用转换流以指定编码方式编码
* OutputStreamWriter + FileOutputStream +指定编码表
*/
OutputStreamWriter outW2 = new OutputStreamWriter(new FileOutputStream(
"d:/ex/a/utf_8_outputStreamWriter04.txt"),"UTF-8");
outW2.write("这个应该没有问题吧。。");
outW2.close();
}
/*
* 通过使用转换流,指定字符集,
* 就可以解决乱码了。
* specialDecoding1-指定解码
*/
public static void specialDecoding1() throws IOException {
/*
* 使用这个方法可以解决乱码,
* 但是UTF-8格式会在文件头部产生一个字符,
* 这个是无法解决的。
*/
InputStreamReader inR = new InputStreamReader(new FileInputStream(
"d:/ex/a/myUTF8.txt"), "UTF-8");
char[] cbuf = new char[50];
int num = inR.read(cbuf);
while (num != -1) {
System.out.println(new String(cbuf, 0, num));
num = inR.read(cbuf);
}
}
/*
* decoding-解码
*/
public static void fileReaderDecoding1() throws IOException {
/*
* myeclipse默认设置为GBK
* myUTF8.txt以UTF-8格式保存
* 这种方式会出现乱码,
* 因为系统设置的编码表与文件保存的编码表不同,
* 所以输出的中文时乱码。
*/
FileReader fr = new FileReader("d:/ex/a/myUTF8.txt");
char[] cbuf = new char[50];
int num = fr.read(cbuf);
while (num != -1) {
System.out.println(new String(cbuf, 0, num));
num = fr.read(cbuf);
}
}
/*
* decoding-解码
*/
public static void fileReaderDecoding2() throws IOException {
/*
* myeclipse默认设置为GBK
* myGBk.txt以GBK格式保存
* 这种方式不会出现乱码。
*/
FileReader fr = new FileReader("d:/ex/a/myGBK.txt");
char[] cbuf = new char[50];
int num = fr.read(cbuf);
while (num != -1) {
System.out.println(new String(cbuf, 0, num));
num = fr.read(cbuf);
}
}
}
myeclipse项目,有包名。