(注:本篇文章是上一篇的后续,如果了解基础IO请先学习上一篇;欢迎大家学习讨论和批评指正)
传输char和String类型的数据
package com.by.test2;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestReader {
public static void main(String[] args) {
try(
//字符输入节点流
FileReader fr=new FileReader("file/d.txt")
){
while (true) {
int n = fr.read();
if (n == -1) {
break;
}
System.out.println((char) n);
}
}catch (FileNotFoundException e) {
System.out.println("文件路径不正确");
} catch (IOException e) {
System.out.println("读写失败!");
e.printStackTrace();
} catch (Exception e) {
System.out.println("未知异常!");
e.printStackTrace();
}
}
}
package com.by.test2;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestWriter {
public static void main(String[] args) {
try(
//字符输出节点流
FileWriter fw=new FileWriter("file/e.txt")
){
fw.write(65);
fw.write(66);
fw.write(67);
//写入字符串
fw.write("一二三四五");
fw.write("上山打老虎");
System.out.println("写入成功!");
}catch (FileNotFoundException e) {
System.out.println("文件路径不正确");
} catch (IOException e) {
System.out.println("读写失败!");
e.printStackTrace();
} catch (Exception e) {
System.out.println("未知异常!");
e.printStackTrace();
}
}
}
package com.by.test2;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestBufferedReader {
public static void main(String[] args) {
try(
//字符输入节点流
FileReader fr=new FileReader("file/d.txt");
//添加缓冲过滤流
BufferedReader br=new BufferedReader(fr)
){
while (true) {
//接收本次读取内容
String s = br.readLine();
//判断读取是否到达末尾
if (s == null) {
break;
}
System.out.println(s);
}
}catch ...
}
}
package com.by.test2;
import com.by.entity.Student;
import java.io.*;
public class TestPrintWriter {
public static void main(String[] args) {
try(
//字符输出节点流
FileWriter fw=new FileWriter("file/e.txt");
//添加缓冲过滤流
PrintWriter pw=new PrintWriter(fw)
){
pw.print(5.5);
pw.print(true);
pw.println();
pw.println("一二三四五");
pw.println("上山打老虎");
Student s = new Student("zhangsan", 20, 99.5);
pw.println(s);
System.out.println("写入成功!");
}catch...
}
}
pw对象中的print|println方法写对象与对象过滤流写对象的区别?
pw只是在读写对象引用的toString方法的结果,并未读写对象的完整信息,所以无法对对象进行序列号及反序列化
对象过滤流是在读写对象的完整信息,所以可以对对象进行序列号及反序列化
pw中的print|println方法与输出语句中的有何不同?
pw是将数据写入到目标文件长久保存
标准输出流是将数据写入到控制台临时查看
不同编码集拥有独立的编解码方式,之间互不相通
InputStreamReader isr=new InputStreamReader(fis对象,"编码集");
OutputStreamWriter osw=new OutputStreamWriter(fos对象,"编码集");
对同一文件的输入输出操作必须保证编解码集一致
package com.by.test2;
import java.io.*;
public class Test_ISR_OSW {
public static void main(String[] args) {
try(
//创建输出流
//创建字节输出节点流
FileOutputStream fos=new FileOutputStream("file/m.txt");
//创建桥转换流
OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
//添加缓冲过滤流
PrintWriter pw=new PrintWriter(osw);
//创建输入流
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("file/m.txt"),"GBK"))
){
//先写
pw.println("一二三四五");
pw.println("上山打老虎");
pw.println("老虎没打着");
pw.println("打着小松鼠");
//刷新缓冲区
pw.flush();
//后读
while (true) {
String s = br.readLine();
if (s == null) {
break;
}
System.out.println(s);
}
}catch...
}
}