一、编码和解码:
图片来自哔站黑马程序员
代码演示:
package a02charstreamdemo;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class charStreamDemo1 {
public static void main(String[] args) throws UnsupportedEncodingException {
//1.编码
String str="ai你哟";
//注意:idea默认的是UTF-8:一个英文一个字节,一个中文3个字节
//如果用的是eclipse默认的是jbk:一个英文一个字节,一个中文2个字节
byte[] bytes1 = str.getBytes();
System.out.println(Arrays.toString(bytes1));//[97, 105, -28, -67, -96, -27, -109, -97]
byte[] bytes2 = str.getBytes("GBK");//GBK大写小写都可以
System.out.println(Arrays.toString(bytes2));//[97, 105, -60, -29, -45, -76]
//2.解码
String str2=new String(bytes1);
System.out.println(str2);
String str3=new String(bytes1,"GBK");
System.out.println(str3);
}
}
运行结果:
二、FileReader读取文件:
方法:
public int read()--------->读取数据,读到末尾返回-1
public int read(char[] buffer)--------->读取多个数据,读到末尾返回 -1
细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数
细节2:读到文件末尾了,read方法返回-1
利用空参read方法读取数据代码演示:
package a02charstreamdemo;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class charStreamDemo2 {
public static void main(String[] args) throws IOException {
//1.创建对象并关联本地文件
FileReader fr=new FileReader("Test\\a.txt");
//2.读取数据 read()
//细节:read()默认也是一个字节一个字节读取的,如果遇到中文就会一次读取多个
//在读取之后,方法的底层还会进行解码并转成十进制,最终把这个十进制作为返回值
//这个十进制的数据也表示在字符集是那个的数字
//英文:文件里面二进制数据 01100001
// read方法进行读取,解码并转成十进制97
//中文:文件里面二进制数据 11100110 10110001 10001001
// read方法进行读取,解码并转成十进制27721
//如果想看到中文汉字,就是把这些十进制数据,再进行强转就可以了
int ch;
while((ch=fr.read())!=-1){
System.out.print((char)ch);
}
fr.close();
}
}
运行结果:
带参读取代码演示:
package a02charstreamdemo;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class charStreamDemo3 {
public static void main(String[] args) throws IOException {
//1.创建对象并关联本地文件
FileReader fr=new FileReader("Test\\a.txt");
//2.读取数据
char[] chars=new char[2];
int len;
//read(chars)读取数据、解码、强转三步合并了,把强转之后的字符放到数组当中
//空参的read方法+强制类型转换
while ((len=fr.read(chars))!=-1){
//把数组中的数据变成字符串在进行打印
System.out.print(new String(chars,0,len));
}
fr.close();
}
}
运行结果:
三、FileWrite写出数据
1.FileWriter构造方法
2.FileWriter成员方法:
FileWriter书写细节:
①创建字符输出流对象
细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
②写数据
细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
③释放资源
代码演示:
package a02charstreamdemo;
import java.io.FileWriter;
import java.io.IOException;
public class charStreamDemo4 {
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("Test\\a.txt",true);
char[] chars={'a','b','c','d','我'};
// fw.write("鹿晗真帅!!!");
fw.write(chars);
fw.close();
}
}
运行结果: