All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.linpeilie.processor.utils.FileWriter Maven / Gradle / Ivy

The newest version!
package io.github.linpeilie.processor.utils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UncheckedIOException;
import java.nio.charset.Charset;

public class FileWriter extends FileWrapper {

    private static final long serialVersionUID = 1L;

    public static FileWriter create(File file, Charset charset) {
        return new FileWriter(file, charset);
    }

    // ------------------------------------------------------- Constructor start

    public FileWriter(File file, Charset charset) {
        super(file, charset);
        checkFile();
    }

    // ------------------------------------------------------- Constructor end

    public  File writeLines(Iterable list, boolean isAppend) {
        return writeLines(list, null, isAppend);
    }

    public BufferedWriter getWriter(boolean isAppend) {
        try {
            return new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(FileUtils.touch(file), isAppend), charset));
        } catch (Exception e) {
            throw new UncheckedIOException(new IOException(e));
        }
    }

    public PrintWriter getPrintWriter(boolean isAppend) {
        return new PrintWriter(getWriter(isAppend));
    }

    public  File writeLines(Iterable list, LineSeparator lineSeparator, boolean isAppend) {
        try (PrintWriter writer = getPrintWriter(isAppend)) {
            boolean isFirst = true;
            for (T t : list) {
                if (null != t) {
                    if (isFirst) {
                        isFirst = false;
                        if (isAppend && FileUtils.isNotEmpty(this.file)) {
                            // 追加模式下且文件非空,补充换行符
                            printNewLine(writer, lineSeparator);
                        }
                    } else {
                        printNewLine(writer, lineSeparator);
                    }
                    writer.print(t);

                    writer.flush();
                }
            }
        }
        return this.file;
    }

    private void printNewLine(PrintWriter writer, LineSeparator lineSeparator) {
        if (null == lineSeparator) {
            //默认换行符
            writer.println();
        } else {
            //自定义换行符
            writer.print(lineSeparator.getValue());
        }
    }

    private void checkFile() {
        if (file == null) {
            throw new UncheckedIOException(new IOException("File to write content is null !"));
        }
        if (this.file.exists() && !file.isFile()) {
            throw new UncheckedIOException(
                new IOException("File [" + this.file.getAbsoluteFile() + "] is not a file !"));
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy