转换流
虽然字节流与字符流表示两种不同的数据流操作,但是这两种流彼此间是可以实现互相转换的,而要想实现这样的转换就可以通过InputStreamReader、OutputStreamWriter两个类实现。首先来观察一下这两个类的继承结构以及构造方法:
名 称 | InputStreamReader | OutputStreamWriter |
定义结构 | public class InputStreamReader extends Reader | public class OutputStreamWriter extends Writer |
构造方法 | public InputStreamReader(InputStream in) | public OutputStreamWriter(OutputStream out) |
实现输出流转换
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class TestDemo {
public static void main(String[] args) throws Exception { // 此处直接抛出
File file = new File("d:" + File.separator + "demo" + File.separator
+ "mldn.txt"); // 1、定义要输出文件的路径
if (!file.getParentFile().exists()) { // 判断父路径是否存在
file.getParentFile().mkdirs() ;// 创建父路径
}
OutputStream output = new FileOutputStream(file) ; // 字节流
// 将OutputStream类对象传递给OutputStreamWriter类的构造方法,而后向上转型为Writer
Writer out = new OutputStreamWriter(output) ;
out.write("ww"); // Writer类的方法
out.flush();
out.close();
}
}
字符编码
Ø 计算机中所有的信息组成都是二进制数据,那么所有能够描述出的中文文字都是经过处理后的结果。在计算机的世界里,所有的语言文字都会使用编码来进行描述,例如:最常见的编码是ASC II码。在实际的工作里面最为常见的几种编码如下:
Ø GBK、GB2312:中文的国标编码,其中GBK包含有简体中文与繁体中文两种,而GB2312只包含简体;
Ø ISO8859-1:是国际编码,可以描述任何的文字信息(中文需要转码);
Ø UNICODE:是十六进制编码,但是在传递字符信息是会造成传输的数据较大;
Ø UTF编码(Unicode Transformation Format):是一种UNICODE的可变长度编码,常见的编码为UTF-8编码;
取得当前系统中的环境属性中的文件编码
public classTestDemo {
publicstatic void main(String[] args) throws Exception {
System.getProperties().list(System.out);//列出全部系统属性
}
}
程序出现乱码
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class TestDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "mldn.txt");
OutputStream output = new FileOutputStream(file);
// 强制改变文字的编码,此操作可以通过String类的getBytes()方法实现
output.write("ww".getBytes("ISO8859-1"));
output.close();
}
}