2、字符流
1)编码问题
2)认识文本和文本文件
Java的文本(char)是16位无符号整数,是字符Unicode编码(双字节编码)
文件是byte byte byte.....的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果
3)字符流(Reader Write)--->操作的是文本文件
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte客流,按照编码处理
把很大的数组直接构造为字符串.
注意这里的"按照编码处理/解析".
文本当中需要清楚的"编码"问题.
注意这里是"char"数组.
字符流的基本实现.
注意:
InputStreamReader是从"字节流"解析为"字符流"
OutputStreamWriter是从"字符流"解析为"字节流"
字符流的转化过程。字符流操作的是文本文件,即char序列的文件。
做字符的文本复制,一定要注意编码的问题
文本,文本文件和文件的区别。一个字节8位所以一个字符两个字节是16位
字符流重点
文本和文本文件
一知半解,以后回来看
将读到的"字符"向"字符串"做转换.
奇迹出现!
控制台直接打印出文本文件内容.
当然因为是"字符流"而不是"字节流"
"文本是byte byte byte... 的数据序列" 这里我明白byte的意思了 意思是文件就是由一个个byte组成的 也就是八位的"数据"(这里还不敢说是字符)
文本文件是文本序列.
2222222
1111111111111111
字节字符转换流
2.字符流
1)编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte byte byte 。。。的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,bgk)序列化为byte的存储结果
3)字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/FileWriter
char字符是带有编码的byte[]
认识文本和文本文件
关于文件中类容的读写:
输入:
String s=new String ("内容");
然后转换成字节形式
byte[ ] b=s.getBytes("UTF-8"(可选操作));
然后: in.write(b);
认识文本和文本文件
字符流操作
1)编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte byte byte......的数据序列
文本文件是文本(char)序列按照某种编码(utf-8,utf-16be,gbk)序列化为byte的结果
3)字符流(Reader,Writer)---->操作的是文本文件
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析 可以自定义编码格式
OutputStreamWriter 提供char流到byte流,按照编码处理
FileWriter FileReader
FileWriter fw = new FileWriter("d:/java/javaIO/copy1.txt",true); //有true的时候追加操作 且无法定义编码类型,在不是gbk编码下会出现乱码
字符流的过滤器
BufferedReader -->readLine一次读一行
BufferedWriter/PrintWriter --->写一行
通常用 BufferedReader 和 PrintWriter 组合使用来完成字节流的过滤
BufferedReader br = new BufferedReader( //下面的整个构造(2行)可以用new FileReader("d:/java/javaIO/copy1.txt");
new InputStreamReader( //InputStreamReader可以自定义编码形式
new FileInputStream("d:/java/javaIO/copy.txt")));
PrintWriter pw = new PrintWriter("d:/java/javaIO/copy3.txt");
InputStreamReader isr=new InputStreamReader(FileInputStream,[文件编码格式]);//解析文件为char流,按照文件编码解析。
int c;
char []buffer=new char[8*1024];
while((c=isr.read(buffer,0,buffer.length))!=-1){
System.out.print(buffer);
}
isr.close();
在Java中,new File("name")不会创建新文件,在new File()之后需要调用createNewFile()才能创建新文件;
new FileOutputStream("name")会产生一个新文件;
new FileInputStream("name")不会创建新文件,若文件不存在会报错.