字符编码:
ASCII码 0—127 8位二进制数 1个字节 16位二进制(2个字节) 010101001010 0—65535
国际通用 Unicode 一个汉字两个字节。
如果仍使用字节流处理数据,那么在处理汉字时就会出现截断的现象。
一、使用FileReader对文本读取信息基类:Reader
- FileReader(File file)
- FileReader(String name)
常用方法:
- int read() //读取一个字符,返回字符编码
- int read(char[] b) //读取到一个字符数组 ,返回读取长度
- int read(char[] b,int off,int len)读取到一个字符数组的某一部分
- void close();
子类BufferedReader常用的构造方法
- BufferedReader(Reader in);
子类BufferedReader特有的方法
- readLint();
测试1:读取文件中的汉字信息
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class FileReaderDemo {
public static void main(String[] args) {
// 1.创建一个字符流对象
Reader fr = null;
try {
fr = new FileReader("f:/晚上好.txt");
// 2.读取文本文件
int word;// 接收读取到的字符
while ((word = fr.read()) != -1) {
System.out.print((char) word);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 3.关闭流
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
测试2:使用字符数组读取文本信息:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class FileReaderDemo {
public static void main(String[] args) {
// 1.创建一个字符流对象
Reader fr = null;
StringBuffer sb = new StringBuffer();
try {
fr = new FileReader("f:/晚上好.txt");
// 2.读取文本文件
/* * int word;// 接收读取到的字符 while ((word = fr.read()) != -1) { * System.out.print((char) word); } */
char[] words = new char[1024];// 创建字符数组作为中转站
int len = fr.read(words);// 将字符读入数组
while (len != -1) {// 循环读取并追加字符
sb.append(words);// 追加到字符串
len = fr.read(words);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 3.关闭流
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(sb.toString());
}
}
二、使用BufferedReader向文本文件读取信息: 如何提高字符流读取文本文件的效率? - 使用FileReader类与BufferedReader类
BufferedReader类是Reader类的子类,带有缓冲区,具有按行读取内容的readLine()方法
测试:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/* * 使用BufferedReader字符流读取文本文件 * @Hudie */
public class FileReaderDemo {
public static void main(String[] args) {
// 1.创建一个字符流对象
Reader fr = null;
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
fr = new FileReader("f:/晚上好.txt");
br = new BufferedReader(fr);
// 2.读取文本文件
/* * int word;// 接收读取到的字符 while ((word = fr.read()) != -1) { * System.out.print((char) word); } */
/* * char[] words = new char[1024];// 创建字符数组作为中转站 int len = * fr.read(words);// 将字符读入数组 while (len != -1) {// 循环读取并追加字符 * sb.append(words);// 追加到字符串 len = fr.read(words); } */
String line = null;// 接收读取到的信息
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 3.关闭流
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
BufferedReader按照行进行读取,是一种带有缓冲区的流
三、使用FileWriter向文本文件写信息。
输出流:
基类:Writer
FilWriter
构造:FileWriter(File file)
- FileWriter(File file,boolean append);//append表示是否是追加写,true为追加
- FileWriter(String name); FileWriter(String name ,boolean append);
方法:
- void close();
- void flush();//刷新缓冲区
- write(int c); write(char[] ch);
- write(char[],int off,int len);
- write(String str);
- wtrie(String str,int off,int len);
测试,使用FileWriter向文本文件写信息
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class FileWriterDemo {
public static void main(String[] args) {
// 1.创建流
Writer wr = null;
try {
wr = new FileWriter("f:/晚上好.txt",true);
// 2.写入信息
wr.write("马上期末考试好害怕啊QAQ");
wr.flush();//刷新缓冲区
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 3.关闭流
if (wr != null) {
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
四、使用BufferedWriter向文本文件写信息。
如何提高字符流写文本文件的效率?
- 使用FileWriter类与BufferedWriter类
BufferedWriter类是Writer类的子类,带有缓冲区
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class BufferedWriterDemo {
public static void main(String[] args) {
// 创建一个BufferedWriter
Writer wr = null;
BufferedWriter bw = null;
Reader rd = null;
BufferedReader br = null;
try {
wr = new FileWriter("f:/晚上好.txt");
bw = new BufferedWriter(wr);
// 写入信息
bw.write("不要慌,稳住");
bw.newLine();// 输出一个换行符
bw.write("那还不滚去复习!");
bw.newLine();
bw.write("看看你一天天都在干啥!");
bw.newLine();
// 读取文件中的信息
rd = new FileReader("f:/晚上好.txt");
br = new BufferedReader(rd);
String line;// 存储读到的信息
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (wr != null) {
try {
wr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (rd != null) {
try {
rd.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
测试结果: