1 前言
为了降低耦合并提供强大的功能,Java提供了非常丰富多样的Stream类,如InputStream, OutputStream, BufferedStream等。强大的功能同样也是一把双刃剑,给使用记忆带来了很多麻烦,不是每个人都是天天使用Java的这些类,并把它们记得非常清楚。相信有很多和笔者一样的人,每次在使用的时候,都需要查看相应的代码。为了解决这个问题,笔者根据常用的功能,编写了一个简易的Java类,TextWriter,专门用于文本的读写。
2 功能描述
这个类的主要就是用于将文本写入至文件中。文本写的时候其实只需要三步,打开,写入,关闭即可。所以对应的此类提供了相应的功能:
2.1 打开
打开是在新建的时候完成的,本类提供了三个构造函数,分别是
// 需要写入的文件名
TextWriter(String filename)
// 需要写入的文件名和是否为追加模式,如果不是追加模式,且指定文件已经存在,则会清除原来存在的文件。
TextWriter(String filename, boolean append)
// 与上一个相比,增加了字符体,包括 US-ASCII,ISO-8859-1,UTF-8,UTF-16BE,UTF-16LE 和 UTF-16
TextWriter(String filename, boolean append, String charset)
2.2 写入
提供了两个函数用于写入分别如下:
// 将字符串s追加至文件中。
write(String s)
// 将字符串s追加至文件中, 同时追加换行。在Windows下追加 \r\n,在Linux系统下追加 \n
writeLine(String s)
这两个是最基本的写入方便,如果觉得不够,比如 write(int v)
可以自行扩展。
2.3 关闭
每次写完记得调用close()
方法保存即可。
3 应用示例
public static void main(String[] args) throws Exception {
String filename = "D:\\data\\text.txt";
TextWriter tw = new TextWriter(filename, false);
for(int i = 0; i < 10; i ++) {
tw.writeLine("同学1 i = " + i);
}
tw.close();
tw = new TextWriter(filename, true);
for(int i = 0; i < 10; i ++) {
tw.writeLine("同学2 i = " + i);
}
tw.close();
System.out.println("Done.");
}
4 源代码
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* @author 郝伟老师
* @date 2020/02/19
* @description 一个简单的Java方便写入类。
*/
public class TextWriter {
String filename;
String cs;
RandomAccessFile raf;
String seperator;
void setSeperetor(){
seperator = new File("C:").exists() ? "\r\n" : "\n";
}
/**
* 向一个文本文件中添加内容,默认编码为UTF8.
* @param filepath 文件路径。
*/
public TextWriter(String filepath) throws IOException {
initialize(filename, false, "utf-8");
}
/**
* 向一个文本文件中添加内容,默认编码为UTF8.
* @param filepath 文件路径。
* @param append 是否追加。
* @throws IOException
*/
public TextWriter(String filename, Boolean append) throws IOException{
initialize(filename, append, "utf-8");
}
/**
* 向一个文本文件中添加内容,默认编码为UTF8.
* @param filepath 文件路径。
* @param append 是否追加。
* @param cs 编码格式,可以使用StandardCharsets表示。
* @throws IOException
*/
public TextWriter(String filename, Boolean append, String charset) throws IOException{
initialize(filename, append, charset);
}
private void initialize(String filename, Boolean append, String charset) throws IOException{
this.filename = filename;
this.cs = charset;
setSeperetor();
if(append) {
raf = new RandomAccessFile(this.filename, "rw");
raf.seek(raf.length());
}else{
File file = new File(filename);
if(file.exists()) {
file.delete();
}
raf = new RandomAccessFile(this.filename, "rw");
}
}
/**
* 写入指定的字符。
* @param c 待写入字符。
* @throws IOException
*/
public void write(char c) throws IOException{
write(c + "");
}
/**
* 写入指定的字符串。
* @param s 待写入字符串。
* @throws IOException
*/
public void write(String s) throws IOException{
raf.write(s == null ? new byte[0] : s.getBytes(cs));
}
/**
* 写入指定的字符串,并自动追加换行符。
* @param s 待写入字符串。
* @throws IOException
*/
public void writeLine(String s) throws IOException {
write(s);
write(seperator);
}
public void close() throws IOException {
if(raf != null)
raf.close();
}
}