您的位置:首页 > 编程语言 > Java开发

JavaSE入门学习45:文件传输基础之I/O流(四)

2016-05-20 17:41 543 查看

五字符流的使用

(1)编码问题

这个问题我们早就说过了,不再过多赘述。

参考:JavaSE入门学习42:文件传输基础之I/O流(一)

(2)认识文本和文本文件

Java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码);而文件是byte byte byte ...的数据

;文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk等)序列化为byte的存储结果。

(3)字符流(Reader Writer)---->操作的是文本文本文件

字符的处理,一次处理一个字符。

字符的底层任然是基本的字节序列。

(4)字符流的基本实现

1)InputStreamReader类和OutputStreamWriter类

InputStreamReader类是完成byte流解析为char流,按照编码解析。

InputStreamReader类的方法:



OutputStreamWriter类是提供char流到byte流,按照编码处理。

OutputStreamWriter类的方法:



实例代码:

import java.io.*;

public class IsrAndOswDemo{
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("E:\\Java\\JavaSE\\IO\\testutf8.txt");
InputStreamReader isr = new InputStreamReader(in);//默认项目的编码,操作的时候,要写文件本身的格式
//InputStreamReader isr = new InputStreamReader(in,"gbk");

FileOutputStream out = new FileOutputStream("E:\\Java\\JavaSE\\IO\\testutf81.txt");
OutputStreamWriter osw = new OutputStreamWriter(out);
//int c;
//while((c = isr.read())!=-1){
//	System.out.print((char)c);
//}

char[] buffer = new char[8*1024];
int b;
/*
*批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个
*返回的是读到的字符的个数
*/
while(( b = isr.read(buffer,0,buffer.length))!=-1){
String s = new String(buffer,0,b);
System.out.print(s);
osw.write(buffer,0,b);
osw.flush();
}
isr.close();
osw.close();
}
}


运行结果:





2)FileReader类和FileWriter类

FileReader类用来读取字符文件的便捷类。

FileWriter类用来写入字符文件的便捷类。

FileReader类和FileWriter类中的方法都是来自继承的方法,并没有自己独有的方法。

实例代码:

import java.io.*;

public class FrAndFwDemo {
public static void main(String[] args) throws IOException{
//采用的是默认编码格式,这里并不能指定编码格式
FileReader fr = new FileReader("E:\\Java\\JavaSE\\IO\\test.txt");
FileWriter fw = new FileWriter("E:\\Java\\JavaSE\\IO\\test2.txt");
//继续在后面追加内容
//FileWriter fw = new FileWriter("E:\\Java\\JavaSE\\IO\\test2.txt",true);
char[] buffer = new char[2056];
int c ;
while((c = fr.read(buffer,0,buffer.length))!=-1){
fw.write(buffer,0,c);
fw.flush();
}
fr.close();
fw.close();
}
}


运行结果:



(5)字符流的过滤器

BufferedReader类---->readLine 一次读一行

BufferedReader类从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓

冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

BufferedWriter/PrintWriter类---->写一行

BufferedWriter类将文本写入字符输出流,缓冲各个字符,从而实现字符、数组和行的高效读取。

PrintWriter类向文本输出流打印对象的格式化表示形式。

BufferedReader类的方法:



BufferedWriter类的方法:



PrintWriter类的方法:







实例:

import java.io.*;

public class BrAndBwOrPwDemo {
public static void main(String[] args) throws IOException{
//对文件进行读写操作
BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream("E:\\Java\\JavaSE\\IO\\test.txt")));
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream("E:\\Java\\JavaSE\\IO\\test3.txt")));
PrintWriter pw = new PrintWriter("E:\\Java\\JavaSE\\IO\\test4.txt");
//PrintWriter pw1 = new PrintWriter(outputStream,boolean autoFlush);
String line ;
while((line = br.readLine())!=null){
System.out.println(line);//一次读一行,并不能识别换行
//bw.write(line);
//单独写出换行操作
//bw.newLine();//换行操作
//bw.flush();
pw.println(line);
pw.flush();
}
br.close();
//bw.close();
pw.close();
}
}


运行结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: