一、字节流是只读取一个字节,字符流是读取2个字节。一个汉字占用2个字节‘
package Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Test8 {
public static void main(String[] args) throws IOException {
try {
File file=new File("E:/temp/text.txt");
FileInputStream fStream=new FileInputStream(file);
StringBuffer sub=new StringBuffer();
byte[] b=new byte[4];// 如果这样写,“你好”汉字能读出,但是那是因为没有符号。有符号的话还是会出现乱码
while(fStream.available()>0){//字节流是支持写入汉字的但是不 好,一有标点就会乱码。字节流独有的判断方法
fStream.read(b);
String string=new String(b);//读取内容转换为字符串
sub.append(string);
b=new byte[4];//重新new一个数组,把原来的数组清空
}
System.out.println(sub.toString().trim());//trim方法是把后面的空格去掉
fStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二、
package Test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.security.auth.Subject;
public class test9 {
public static void main(String[] args) {
// 使用字符流读取文件
try {// 创建文件对象
File file = new File("E:/temp/text.txt");
// 根据源文件对象那构建字符读取流
FileReader fr = new FileReader(file);
// 创建追加存储读取内容的StringBuffer对象
StringBuffer su = new StringBuffer();
// 定义char类型的额容器数组
char[] c = new char[1024];
// 读取并返回读取长度(如没读到返回-1)
int length = fr.read(c);
// 循环判断读取
while (length != -1) {// 将本次读取的内容追加到sub中
su.append(c);
c = new char[1024];// 重置数组
length = fr.read(c);
}
fr.close();
System.out.println(su.toString().trim());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}