minecraft-src/net/minecraft/util/CsvOutput.java
2025-07-04 01:41:11 +03:00

56 lines
1.6 KiB
Java

package net.minecraft.util;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringEscapeUtils;
import org.jetbrains.annotations.Nullable;
public class CsvOutput {
private static final String LINE_SEPARATOR = "\r\n";
private static final String FIELD_SEPARATOR = ",";
private final Writer output;
private final int columnCount;
CsvOutput(Writer output, List<String> firstRow) throws IOException {
this.output = output;
this.columnCount = firstRow.size();
this.writeLine(firstRow.stream());
}
public static CsvOutput.Builder builder() {
return new CsvOutput.Builder();
}
public void writeRow(Object... data) throws IOException {
if (data.length != this.columnCount) {
throw new IllegalArgumentException("Invalid number of columns, expected " + this.columnCount + ", but got " + data.length);
} else {
this.writeLine(Stream.of(data));
}
}
private void writeLine(Stream<?> data) throws IOException {
this.output.write((String)data.map(CsvOutput::getStringValue).collect(Collectors.joining(",")) + "\r\n");
}
private static String getStringValue(@Nullable Object value) {
return StringEscapeUtils.escapeCsv(value != null ? value.toString() : "[null]");
}
public static class Builder {
private final List<String> headers = Lists.<String>newArrayList();
public CsvOutput.Builder addColumn(String header) {
this.headers.add(header);
return this;
}
public CsvOutput build(Writer output) throws IOException {
return new CsvOutput(output, this.headers);
}
}
}