字符流
- 字符流的父类(抽象类):
- Reader:字符输入流
- Writer:字符输出流
文件字符流
FileReader
import java.io.FileReader;
/**
* 使用FileReader读取文件
*/
public class Demo02 {
public static void main(String[] args) throws Exception {
//创建FileReader文件字符输入流
FileReader fr = new FileReader("d:\\hello.txt");
//读取字符
//单个读取
// int date = 0;
// while ((date= fr.read())!=-1){
// System.out.println((char) date);
// }
// System.out.println();
char[] buf=new char[1024];
int count=0;
while ((count=fr.read(buf))!=-1){
System.out.println(new String(buf,0,count));
}
//关闭
fr.close();
System.out.println("执行完毕");
}
}
FileWriter
import java.io.FileWriter;
/**
* 使用FileWriter写入文件
*/
public class Demo03 {
public static void main(String[] args) throws Exception {
//1创建FileWrite对象
FileWriter fw = new FileWriter("d:\\write.txt");
//写入
for (int i = 0; i < 10; i++) {
fw.write("Java\n");
fw.flush();
}
//关闭
fw.close();
System.out.println("执行完毕");
}
}
实战
import java.io.FileReader;
import java.io.FileWriter;
/**
* 使用FileReader和FileWriter复制文本文件,不能复制图片等二进制文件。
* 使用字节流复制任意文件
*/
public class Demo04 {
public static void main(String[] args) throws Exception {
//创建对象
FileWriter writer = new FileWriter("d:\\write.txt");
FileReader reader = new FileReader("d:\\hello.txt");
//复制文件
// int date=0;
// while ((date= reader.read())!=-1){
// writer.write(date);
// }
char[] buf = new char[1024];
int count=0;
while ((count= reader.read(buf))!=-1){
writer.write(new String(buf,0,count));
}
writer.flush();
//关闭
reader.close();
writer.close();
System.out.println("复制完毕");
}
}
字符缓冲流
- 缓冲流:BufferedReader/BufferedWriter
BufferedReader
import java.io.BufferedReader;
import java.io.FileReader;
/**
* 使用BufferedReader字符缓冲流读取文件
*/
public class Demo05 {
public static void main(String[] args) throws Exception{
//1创建缓冲流
FileReader fr = new FileReader("d:\\hello.txt");
BufferedReader br = new BufferedReader(fr);
//2读取
//2.1read()读取
// char[] buf = new char[1024];
// int count=0;
// while ((count=br.read(buf))!=-1){
// System.out.println(new String(buf,0,count));
// }
//2.2readLine()读取
String line = null;
while ((line=br.readLine())!=null){
System.out.println(line);
}
System.out.println();
//关闭
br.close();
System.out.println("执行完毕");
}
}
BufferedWriter
import java.io.BufferedWriter;
import java.io.FileWriter;
/**
* 使用BufferedWriter写入数据。
*/
public class Demo06 {
public static void main(String[] args) throws Exception{
//创建对象
FileWriter fw = new FileWriter("d:\\buffer.txt");
BufferedWriter bw = new BufferedWriter(fw);
//写入数据
for (int i = 0; i < 10; i++) {
bw.write("java");//写入java
bw.newLine();//写入一个换行符 Windows \r\n Linux \n
bw.flush();//刷新
}
//关闭IO流
bw.close();
System.out.println("执行完毕");
}
}
打印流
- PrintWriter:
- 封装了print()/println()方法,支持写入后换行。
- 支持数据原样打印。
import java.io.PrintWriter;
/**
* 演示PrintWriter的使用
*/
public class Demo07 {
public static void main(String[] args) throws Exception{
//创建对象
PrintWriter pw = new PrintWriter("d:\\print.txt");
//写入数据
pw.println(97);
pw.println(true);
pw.println(3.14);
pw.println('c');
//关闭
pw.close();
System.out.println("打印完毕");
}
}
转换流
- InputStreamReader/OutputStreamWriter
InputStreamReader
import java.io.FileInputStream;
import java.io.InputStreamReader;
/**
* 使用InputStreamReader读取文件,指定使用的编码
*/
public class Demo01 {
public static void main(String[] args) throws Exception{
//创建对象
FileInputStream fis = new FileInputStream("d:\\write.txt");
InputStreamReader isr = new InputStreamReader(fis,"utf-8");//要保证编码与解码方式一致,否则出现乱码
//读取文件
//单个
int date = 0;
while ((date=isr.read())!=-1){
System.out.print((char) date);
}
System.out.println();
//关闭
isr.close();
System.out.println("执行完毕");
}
}
OutputStreamWriter
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
/**
* 使用OutputStreamWriter写入文件,指定编码
*/
public class Demo02 {
public static void main(String[] args) throws Exception{
//创建OutputStreamReader对象
FileOutputStream fos = new FileOutputStream("d:\\output.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");
//写入文件
for (int i = 0; i < 10; i++) {
osw.write(97);
osw.write("你好");
osw.write("word\n");
osw.flush();
}
//关闭
osw.close();
System.out.println("执行完毕");
}
}