字节流与字符流的相互转换:
字节流:Stream结尾的
字符流:Reader和Writer结尾的
输出字节流中在写入数据后不用刷新
练习:读文件输出到命令行
数据源:读文件(字符流)
输出:标准输出流(字节流)————》字符流
方法一:字符流读,字节流写
import java.io.*;
public class 字符读字节输出 {
public static void main(String[] args) throws IOException {
//高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("Test.java"));
//创建输出流对象
OutputStream os = System.out; //字节流
String line;
while((line = br.readLine()) != null){
os.write(line.getBytes());
os.write("\r\n".getBytes());
}
os.close();
br.close();
}
}
由于标准输入流是一个字节输入流,所以只能输出字节或者字节数组,但是我们读取到的数据则是字符串,如果想进行输出还需要转换成字节数组
我们要想通过标注输出流输出字符串,把标准输出流转换成一种字符输出流即可。
字节输出流————》字符输出流OutputStreamWriter(OutputStream out)
字符流读,字节流转换为字符流输出
import java.io.*;
public class 字符读字节输出 {
public static void main(String[] args) throws IOException {
//高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("Test.java"));
//创建输出流对象
//OutputStream os = System.out; //字节流,标准输出流
//字节流转化成字符流
Writer w = new OutputStreamWriter(System.out);//多态,父类型指向子类对象
String line;
while((line = br.readLine()) != null){
w.write(line);
w.write("\r\n");
}
w.close();
br.close();
}
}
输出流也用高效输出流,用包装流
import java.io.*;
public class 字符读字节输出 {
public static void main(String[] args) throws IOException {
//高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("Test.java"));
//创建输出流对象
//OutputStream os = System.out; //字节流,标准输出流
//字节流转化成字符流
Writer w = new OutputStreamWriter(System.out);//多态,父类型指向子类对象
BufferedWriter bw = new BufferedWriter(w);
String line;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
}
}
最后版本:
import java.io.*;
public class 字符读字节输出 {
public static void main(String[] args) throws IOException {
//高效流也称包装流,本身并不具备读写功能,所以我们要传入一个具备读写的输入流
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("Test.java"));
//创建输出流对象
//OutputStream os = System.out; //字节流,标准输出流
//字节流转化成字符流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//OutputStreamWriter将字节流转化成字符流。System.out是标准输出流(字节流)
String line;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
}
}
练习:读命令行写入到文件中
标准输入(字节流),字符流写入
数据源:读取键盘录入的数据 标准输入流(字节流) System.in 目的地:项目根目录下 FileWriter(字符流)
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
public class 字节读字符写入 {
public static void main(String[] args) throws IOException {
//创建输入流对象
InputStream is = System.in;
//创建输出流对象
FileWriter fw = new FileWriter("a.txt");
//读写数据
byte[] bys = new byte[1024];
int len;
while((len = is.read(bys)) != -1){
fw.write(new String(bys,0,len));
fw.flush();
}
fw.close();
is.close();
}
}
转换流:需要把字节输入流转换成字符输入流:InputStreamReader(InputStream)
import java.io.*;
public class 字节读字符写入 {
public static void main(String[] args) throws IOException {
//创建输入流对象
InputStream is = System.in;
Reader fr = new InputStreamReader(is); //多态,用FileReader不行,不是子父类关系
//创建输出流对象
FileWriter fw = new FileWriter("a.txt");
//读写数据
char[] chs = new char[1024];
int len;
while((len = fr.read(chs)) != -1){
fw.write(new String(chs,0,len));
fw.flush();
}
fw.close();
is.close();
}
}
打印流:只能输出不能输入
PrintStream:System.out.print()和System.out.println();
省了:两个步骤:自动刷新和自动换行
写:
读:
解决对象输入流读取对象出现的异常的问题
解决对实现序列化接口出现的警告问题