简单总结了几个常用的文本文件读写方法
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
public class Deom {
/*
* 用缓存字符流读入TXT文件
*/
public void read() throws Exception{
String pathname = "E:\\java\\file2.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
File file = new File(pathname); // 要读取以上路径的input。txt文件
if(!file.exists()) {
file.createNewFile();
}
InputStreamReader reader = new InputStreamReader(
new FileInputStream(file)); // 建立一个输入流对象reader
BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
String line = null;
while ((line=br.readLine())!= null) { // 一次读入一行数据
System.out.println(line);
}
}
/*
* 覆盖写入Txt文件
*/
public void coverWriter() throws Exception{
File file = new File("E:\\java\\file1.txt");
if(!file.exists()) {
file.createNewFile(); // 创建新文件
}
BufferedWriter out = new BufferedWriter(new FileWriter(file)); //每次覆盖写入
out.write("我会写入文件啦\r\n"); // \r\n即为换行
out.write(48);//写入ASCII值48,对于字符为0,注意这里输入int类型是输入ASCII值。
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
}
/*
* 用 FileWriter(file,true) 追加写入Txt文件
*/
public void addToWriter() throws Exception{
File file = new File("E:\\java\\file3.txt");
if(!file.exists()) {
file.createNewFile(); // 创建新文件
}
BufferedWriter out = new BufferedWriter(new FileWriter(file,true)); //构造方法FileWriter(file,true) true为追加写入
out.write("我会写入文件啦\r\n"); // \r\n即为换行
out.write(48);//写入ASCII值48,对于字符为0,注意这里输入int类型是输入ASCII值。
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
}
/*
* 用 RandomAccessFile追加写入Txt文件
*/
public void addToWriter2() throws Exception{
File file = new File("E:\\java\\file4.txt");
if(!file.exists()) {
file.createNewFile(); // 创建新文件
}
RandomAccessFile rf=new RandomAccessFile(file, "rw");//以读写的方式打开文件
// 文件长度,字节数
long fileLength = rf.length();
// 将写文件指针移到文件尾。
/* seek是指针移动n个字节、skipBytes指针移动n个字节(少量);
有人说seek非常影响系统的开销,但skipBytes内部又调用了seek方法,
也没百度到什么,不太理解,求解!
*/
rf.seek(fileLength);
/*
注意:请使用RandomAccessFile.write(byte b[])方法,这样可以保证不会出现乱码。
原因是String.getBytes()会按系统默认编码获取字符串的字节码,
而RandomAccessFile.write(byte b[])正好也是按照系统默认编码进行写入的,
这样两处编码正好一致,使用其它方法无法保证编码一致。
*/
//rf.writeChars("随机访问文件!");
rf.write("随机访问文件!".getBytes());
rf.close();
}
public static void main(String args[]) {
try {
Deom deom=new Deom();
deom.read();
deom.addToWriter();
deom.addToWriter();
deom.addToWriter2();
deom.addToWriter2();
} catch (Exception e) {
e.printStackTrace();
}
}
}