一个简单易用的Java文本写入类TextWriter

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();
	}	
}

发布了326 篇原创文章 · 获赞 94 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/104402176