1.Writer抽象类
Writer抽象类里的方法
由于Writer是抽象类不能创建对象,所以用它子类来完成写入字符的操作
1.1FileWriter类
FileWriter类是Writer的子类,是文件写入流,以字符流的形式对文件进行写操作,其构造方法有5种重载,以下是常用的4种:
案例:
package Writer;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
//定义常量
private static String LIN_SEPARATOR=System.getProperty("line.separator");//换行
public static void main(String[] args) {
FileWriter fw=null;
try {
//append参数 表示是否追加 ,true添加,false覆盖
fw= new FileWriter("writerData.txt",true);
// File file=new File("writerData.txt");
// fw=new FileWriter(file,true);
// 添加换行符
fw.write(97);
fw.write(LIN_SEPARATOR);
fw.write("393933333"+LIN_SEPARATOR);
fw.write("aaaaa",1,3);
//写入换行符
fw.write(LIN_SEPARATOR);
fw.write(new char[]{'a','b','c'});
//刷新缓冲区,数据立刻写入文件
fw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
换行符
-
不同操作系统换行符:
-
windows下的文本文件换行符:\r\n
-
linux/unix下的文本文件换行符:\n
-
Mac下的文本文件换行符:\r
-
-
要用System.getProperty(“line.separator”)代替 固定格式的换行符
-
具备平台无关性
-
一次编写,到处运行
-
更保险
3.Reader抽象类
Reader抽象类里的方法
由于Reader是抽象类不能创建对象,所以用它子类来完成写入字节的操作
4.FileReader类
FileReader类是Reader的子类,称为文件读取流,允许以字符流的形式对文件进行读操作,其构造方法有3种重载方式,以下是常用的2种:
案例:
package Reader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderTest {
//创建FileReader对象
public static void main(String[] args) {
// readData2();一个一个读这样效率低
readData();//一个一个数组读
}
public static void readData2(){
FileReader fr = null;
try {
fr=new FileReader("writerData.txt");
int ch;
while ((ch=fr.read())!=-1){
System.out.println((char) ch);
}
System.out.println("读取完毕");
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void readData() {
FileReader fr = null;
try {
//创建FileReader对象
fr = new FileReader("writerData.txt");
//八流中数据循环的读到数组缓存中
//定义数据
char[] buffer = new char[1024];
//每次读到数据数量
int num;
//把流中数据循环的读到数组缓存中
//读到的数据为-1表示数据已经读完
while ((num = fr.read(buffer)) != -1) {
//如果把读取的数据长度设定好,读到最后数据长度有空闲 计算机会补上
//如本次数据有36个,设定35长度每次读35个,剩一个new String会补上
//错误写法
// String str =new String(buffer);
// String str=new String(buffer,0,buffer.length);
String str = new String(buffer, 0, num);
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
5.FileReader与FileWriter实现文件的复制
案例:
package Writer;
import javax.imageio.IIOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderAndFileWriterCopyTest {
public static void main(String[] args) {
copyFile();
}
private static void copyFile(){
//FileReader.read
// FileWriter.write
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader("writerData.txt");
fw=new FileWriter("writerData1.txt",true);
int num;
char[] buffer=new char[8];
//边读边写
while ((num=fr.read(buffer))!=-1){
//写入数据到新文件
fw.write(buffer,0,num);
}
fw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fr!=null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
6.BufferedWriter类
BufferedWriter类里有一个方法要注意
案例:
package Writer;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterTest {
public static void main(String[] args) {
// 创建BufferedWriter对象
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter("WriterData2.txt");
bw = new BufferedWriter(fw);
for (int i = 0; i < 4; i++) {
bw.write("abc" + i);
//行分隔符号
bw.newLine();
}
bw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
7.BufferedReader类
BufferedReader类里有一个方法要注意
案例:
package Reader;
import javax.imageio.IIOException;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderTest {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("WriterData2.txt");
br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
8.BufferedWriter与BufferedReader实现文件的复制
案例:
package Writer;
import javax.imageio.IIOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderAndFileWriterCopyTest {
public static void main(String[] args) {
copyFile();
}
private static void copyFile(){
//FileReader.read
// FileWriter.write
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader("writerData.txt");
fw=new FileWriter("writerData1.txt",true);
int num;
char[] buffer=new char[8];
//边读边写
while ((num=fr.read(buffer))!=-1){
//写入数据到新文件
fw.write(buffer,0,num);
}
fw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fr!=null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}