JavaSE入门学习45:文件传输基础之I/O流
Posted life is wonderful
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE入门学习45:文件传输基础之I/O流相关的知识,希望对你有一定的参考价值。
五字符流的使用
(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();
}
}
运行结果:
以上是关于JavaSE入门学习45:文件传输基础之I/O流的主要内容,如果未能解决你的问题,请参考以下文章