10 IO流之——深入了解字符流
程序员文章站
2022-04-30 20:37:02
...
一 编码表
二 转换流(把字节流转换为字符流)
字符流=字节流+编码表
OutputStreamWriter 字符输出流
public OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
public OutputStreamWriter(OutputStream out,String charsetName)根据指定编码把字节流数据转换为字符流
InputStreamReader 字符输入流
public InputStreamReader(InputStream in) 用默认的编码读取数据
public InputStreamReader(InputStream in,String charsetName)用指定的编码读取数据
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
*public OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
*public OutputStreamWriter(OutputStream out,String charsetName)根据指定编码把字节流数据转换为字符流
*
*public InputStreamReader(InputStream in) 用默认的编码读取数据
*public InputStreamReader(InputStream in,String charsetName)用指定的编码读取数据
*/
public class IoDemo10 {
public static void main(String[] args) throws IOException {
// System.out.println("写数据——————————————————————————————————");
//创建对象默认字符
// OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream("a.txt"));
//创建对象指定字符集
// OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream("a.txt"),"UTF-8");
//写数据
// osw.write("中国");
System.out.println("读取数据——————————————————————————————————");
//创建对象默认字符
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"utf-8");
int by = 0;
while((by=isr.read())!=-1){
System.out.print((char)by);
}
//释放资源
// osw.close();
isr.close();
}
}
注意:保证写数据和写数据的编码一致
OutputStreamWriter字符转换流写数据的5种方法
public void write(int c) 写一个字符
public void write(char[] cbuf) 写一个字符数组
public void write(char[] cbuf,intoff,intlen) 写一个字符数组一部分
public void write(String str)写一个字符串
public void write(String str,intoff,intlen)写一个字符串的一部分
OutputStreamWriter字符转换流读数据的2种方法
public int read()
public int read(char[] cbuf)
转换流提供了对应的子类
FileWriter
FileReader
三 高效流
字符流为了高效读写,也提供了对应的字符缓冲流
BufferedWriter 字符缓冲输出流
BufferedReader 字符缓冲输入流
package Stream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 字符流为了高效读写,也提供了对应的字符缓冲流
BufferedWriter 字符缓冲输出流
BufferedReader 字符缓冲输入流
*/
public class TestDemo02 {
public static void main(String[] args) throws IOException {
/*//创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
//写数据
bw.write("hello");
bw.write("world");
bw.write("java");
//释放资源
bw.close();*/
//创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
//读数据
char[] ch = new char[1024];
int len = 0;
while((len=br.read(ch))!=-1){
System.out.print(new String(ch,0,len));
}
//释放资源
br.close();
}
}
字符缓冲流的特殊功能
字节缓冲流的特殊方法
BufferedWriter
public void newLine() 根据系统来决定换行符
BufferedReader
public String readLine() 一次读取一行数据
package Stream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/**
* 字节缓冲流的特殊方法
* BufferedWriter
* public void newLine() 根据系统来决定换行符
* BufferedReader
* public String readLine() 一次读取一行数据
*/
public class TestDemo09 {
public static void main(String[] args) throws IOException {
Writer();
Reader();
}
public static void Reader() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("zxx.txt"));
String line = null;
while((line= br.readLine())!=null){
System.out.println(line);
}
br.close();
}
public static void Writer() throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("zxx.txt"));
for(int i =0;i<=10;i++){
bw.write("hello"+i);
bw.newLine();
}
bw.close();
}
}