这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。
一、Reader / Writer
1.1 概述
- 字符流的抽象父类
1.2 方法
- write(int c)
int四个字节中,末尾两个字节是 char 类型字符数据,只处理末尾两个字节的输出
- write(char[],from,length)
输出from开始的length个字符
- write(String s)
输出字符串的全部字符
二、InputStreamReader/OutputStreamWriter
2.1 概述
- 字符编码转换流
- InputStreamReader
读取 其他编码 转成 Unicode
- OutputStreamWriter
把 Unicode 转成 其他编码 输出
2.2 练习:字符编码转换流
package 字符编码转换流;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Test1_OutputStreamWriter {
public static void main(String[] args) throws IOException {
/*
* "abc中文" --Unicode编码--> 0061 0062 0063 4e2d 6587
* 转成GBK编码-->f4文件
* 转成UTF-8-->f5文件
*/
f("d:/课程项目的临时文件/f4","abc中文","GBK");
f("d:/课程项目的临时文件/f5","abc中文","UTF-8");
f("d:/课程项目的临时文件/f6","abc中文","Unicode");
}
private static void f(String path, String str, String encoding) throws IOException {
// 读写文件的只能是文件流,即FIS或FOS流
// 其他流可以套接文件流;OutputStreamWriter(,第二参数指定编码类型)
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path), encoding);
// 利用文件流输出至文件
out.write(str);
// 关闭文件输入流,才可完成“写入文件”的操作
out.close();
}
}
package 字符编码转换流;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class Test2_OutputStreamWriter {
public static void main(String[] args) throws IOException {
/*
* Unicode编码中所有的中文字符
* /u4e00 -- /u9fa5,共20902个中文字符
* 将以上中文字符,转成GBK输出到f6,
* 将以上中文字符,转成UTF-8输出到f7,
*
*/
f("d:/课程项目的临时文件/f6","GBK");
f("d:/课程项目的临时文件/f7","UTF-8");
}
private static void f(String path, String encoding) throws IOException{
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),encoding);
int count = 0;// 计数,用于换行
// 依次遍历每一个字符并输出至文件
for(char c = '\u4e00';c<='\u9fa5';c++) {
// 编码的转换流,把Unicode转成其他编码再输出
out.write(c);
count++;
// 每输出30个字符,换行
if(count == 30) {
out.write("\n");
count = 0;
}
}
// 释放系统资源
out.close();
}
}
三、BufferedReader
3.1 概述
- BufferedReader 可以一行一行的读取文本数据
- readLine()
读取一行数据
读取结束,再读取,得到 null
3.2 练习:BufferedReader按行读取数据
package 字符编码转换流;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Test3_BufferedReader按行读取readLine方法 {
public static void main(String[] args) throws IOException {
System.out.println("输入一个文件");
String s = new Scanner(System.in).nextLine();
// 创建File对象
File f = new File(s);
// 判断是否为文件,在此测试字符读写,所以指定文本文件
if (!f.isFile()) {
System.out.println("请输入正确的文件名或路径");
return;
}
System.out.println("文件编码方式");
String encoding = new Scanner(System.in).nextLine();
/* *希望一行一行的读取*
* 文件f--FIS(文件字符读取流)--ISR(编码转换流)--BR(按行读取)
* 三个流方式,嵌套一起使用,协同完成操作:
* FileInputStream,直接连接文件,读取
* InputStreamReader,字符编码的转化
* BufferedReader,按行读取文本
*/
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f), encoding));
String line;
// 惯用方式遍历
while((line = in.readLine())!=null) {
System.out.println(line);
}
in.close();
}
}