用字符流进行文件读写,这里列出了两种方法,两种方法都是对字符进行操作
不像字节流,需要使用缓冲;字符流读写适用于对文本文件进行操作
关于如何使用字节流操作,请看: Java IO操作——字节流进行读写操作
/**
* 演示IO操作的字符流操作
*/
package com.test2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* @file_name:IO_Practice2.java
*
* @date:2017年7月15日
*
* @author:Kooking
*
*
*/
public class IO_Practice2 {
public static void main(String[] args) {
//用方法一
/*IO_WriteNRead_1 io_WriteNRead_1 = new IO_WriteNRead_1(new File("e:\\test\\test\\USER3.txt"));
//读文件
// io_WriteNRead_1.readFile();
//写文件
// io_WriteNRead_1.writeFile("你好");
//复制文件(另存为)
io_WriteNRead_1.copyFile("e:\\test\\test\\USER4.txt");*/
//用方法二
ReadNWrite__2 readNWrite__2=new ReadNWrite__2(new File("e:\\test\\test\\USER3.txt"));
//读操作
// readNWrite__2.readFile();
//写操作
readNWrite__2.writeFile("你好\r\n");
readNWrite__2.copyFile("e:\\test\\test\\USER5.txt");
}
}
// 方法一
class IO_WriteNRead_1 {
File file = null;
FileWriter fw = null;
FileReader fr = null;
public IO_WriteNRead_1(File file) {
this.file = file;
}
// 将文件读入到内存
public void readFile() {
char[] c = new char[1024];
String s = null;
int size = 0;
try {
fr = new FileReader(file);
while ((size = fr.read(c)) != -1) {
s = new String(c, 0, size);
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 将数据写出到文件
public void writeFile(String s) {
try {
//覆盖原有文件内容(若存在)
// fw = new FileWriter(file);
//追加内容到原有文件(若存在),否则创建新文件
fw=new FileWriter(file, true);
fw.write(s);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 复制文件
public void copyFile(String s) {
char[] c = new char[1024];
int size = 0;
try {
fr = new FileReader(file);
fw = new FileWriter(s);
while ((size = fr.read(c)) != -1) {
fw.write(c, 0, size);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//方法二:利用字符缓冲流
class ReadNWrite__2{
File file = null;
FileWriter fw = null;
FileReader fr = null;
BufferedWriter bw=null;
BufferedReader br=null;
public ReadNWrite__2(File file) {
this.file = file;
}
// 将文件读入到内存
public void readFile() {
String s = "";
try {
fr = new FileReader(file);
br=new BufferedReader(fr);
while ((s=br.readLine()) != null) {
System.out.println(s+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//应遵循先开后关原则
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 将数据写出到文件
public void writeFile(String s) {
try {
//替代原有文件(若存在)
// fw = new FileWriter(file);
//追加内容到原有文件(若存在),否则创建新文件
fw=new FileWriter(file, true);
bw=new BufferedWriter(fw);
bw.write(s);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//注意:先开后关,顺序不能颠倒,否则会抛出异常
bw.flush();
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 复制文件
public void copyFile(String s) {
String sbuf="";
try {
fr = new FileReader(file);
fw = new FileWriter(s);
br=new BufferedReader(fr);
bw=new BufferedWriter(fw);
while ((sbuf=br.readLine())!=null) {
bw.write(sbuf+"\r\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {//先开后关
br.close();
fr.close();
bw.flush();
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}