1、概念:
使用字符作为载体传输数据的过程。
2、Writer类
(1)API介绍
(2)功能方法
3、FileWriter类
(1)API介绍
(2)构造方法
import java.io.FileWriter;
import java.io.IOException;
public class Demo4_FileWriter {
public static void main(String[] args) throws IOException {
//FileWriter(String)
//FileWriter out = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
//System.out.println(out);//java.io.FileWriter@610455d6
//FileWriter(String,boolean) 如果boolean为true,则不清空文件内容
FileWriter out2 = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt",true);
System.out.println(out2);//java.io.FileWriter@610455d6
//FileWriter(File) 是否需要对路径进行File操作?如需要则使用该构造方法。
//FileWriter(File,boolean)
}
}
(3)功能方法(与Writer类的功能一致)
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo4_FileWriter {
public static void main(String[] args) throws IOException {
Writer out = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
//out.write('c');//一个一个字符写到缓冲区中
//System.out.println("一个一个字符写到缓冲区中");
//char[] c = {'a', 'b', 'c'};
//out.write(c);
//System.out.println("一堆一堆字符写到缓冲区中");
//out.write(c,1,1);
//System.out.println("某一堆字符写到缓冲区中");
String s = "java1221";
//out.write(s);
//System.out.println("字符串写入缓冲区中");
out.write(s,4,4);
System.out.println("某一部分字符串写到缓冲区中");
//缓冲区的类型是什么? 字节类型
//默认缓冲区的大小? 8192
//默认字符编码表是什么? 本电脑字符编码表
out.flush();
out.close();
}
}
4、Reader类
(1)API介绍
(2)功能方法
5、FileReader类
(1)API介绍
(2)构造方法
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Demo5_FileReader {
public static void main(String[] args) throws FileNotFoundException {
//构造方法
//FileReader(String)
FileReader in = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
System.out.println(in);//java.io.FileReader@610455d6
//FileReader(File)
File file = new File("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
FileReader in2 = new FileReader(file);
System.out.println(in2);//java.io.FileReader@511d50c0
}
}
(3)功能方法(与Reader类的功能方法一致)
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo5_FileReader {
public static void main(String[] args) throws IOException {
FileReader in = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
//int read = -1;//字符数据
//read()
/*while((read = in.read())!=-1) {//对字节缓冲区一个一个字符读。
System.out.print((char) read);
}*/
char[] cs = new char[1024];
int len = -1;
//read(char[])
while ((len = in.read(cs)) != -1) {//对字节缓冲区一堆一堆字符读到自定义字符数组中。
System.out.println(new String(cs,0,len));
}
in.close();
//method_构造方法();
}
}
6、文件复制
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo6_文件复制 {
public static void main(String[] args) {
//文件
FileReader in = null;
FileWriter out = null;
try {
//1
in = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
out = new FileWriter("/Users/jim/Desktop/Work/temp/demo.txt");
char[] cs = new char[1024];
int len = -1;
//2
while ((len = in.read(cs)) != -1) {
//3
out.write(cs,0,len);
//4
out.flush();
}
System.out.println("文件复制成功");
} catch (IOException e) {
e.printStackTrace();
} finally{
if(in!=null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out!=null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
注意:字符流无法复制非文本文件,由于读取和写入数据过程中都需要经过字符编码表,在读取字节数据时会硬性转换成字符,但得到字符是无法解析的字符。所以重新写入到硬盘中时,该无法解析的字符无法还原成原有的字节,从而导致文件损坏。>>>对复制非文本文件只能使用字节流
7、BufferedWriter类
(1)API介绍
(2)构造方法
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo7_BufferedWriter {
public static void main(String[] args) throws IOException {
//构造方法
//BufferedWriter(Writer)
Writer w = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt",true);
BufferedWriter out = new BufferedWriter(w);
System.out.println(out);
//BufferedWriter(Writer,int)
BufferedWriter out2 = new BufferedWriter(w, 1024);
System.out.println(out2);
//问题:1、如何解决文件内容清空问题?FileWriter中加入true
// 2、默认字符缓冲空间大小?8192
}
}
(3)功能方法
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo7_BufferedWriter {
public static void main(String[] args) throws IOException {
Writer w = new FileWriter("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
BufferedWriter out = new BufferedWriter(w);
out.write("春眠不觉晓,");
//.nextLine 写入换行符
out.newLine();
out.write("处处蚊子咬。");
out.flush();
out.close();
System.out.println("文件写入成功");
//method_构造方法();
}
}
9、BufferedReader类
(1)API介绍
(2)构造方法
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
public class Demo8_BufferedReader {
public static void main(String[] args) throws FileNotFoundException {
Reader r = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
//BufferedReader(Reader)
BufferedReader in = new BufferedReader(r);
System.out.println(in);
//BufferedReader(Reader,int)
BufferedReader in2 = new BufferedReader(r,1024);
System.out.println(in2);
}
}
(3)功能方法
import java.io.*;
public class Demo8_BufferedReader {
public static void main(String[] args) throws IOException {
Reader r = new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt");
BufferedReader in = new BufferedReader(r);
//readLine() 读取一行字符串数据,包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null
String s = null;
while ((s = in.readLine()) != null) {
System.out.println(s);
}
in.close();
//method_构造方法();
}
}
10、文件复制
import java.io.*;
public class Demo9_文件复制 {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
try {
in = new BufferedReader(new FileReader("/Users/jim/Desktop/Work/temp/java1221/demo.txt"));
out = new BufferedWriter(new FileWriter("/Users/jim/Desktop/Work/temp/demo.txt"));
String s = null;
while ((s = in.readLine()) != null) {//读取一行
out.write(s);//写入数据
out.newLine();//换行
out.flush();
}
System.out.println("文件复制成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(in!=null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out!=null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}