@@ -19,10 +19,10 @@ package org.jackhuang.hmcl.game;
|
|||||||
|
|
||||||
import org.jackhuang.hmcl.util.logging.Logger;
|
import org.jackhuang.hmcl.util.logging.Logger;
|
||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
import org.jackhuang.hmcl.util.io.FileUtils;
|
|
||||||
import org.jackhuang.hmcl.util.io.Zipper;
|
import org.jackhuang.hmcl.util.io.Zipper;
|
||||||
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UncheckedIOException;
|
import java.io.UncheckedIOException;
|
||||||
import java.lang.management.ManagementFactory;
|
import java.lang.management.ManagementFactory;
|
||||||
@@ -93,9 +93,8 @@ public final class LogExporter {
|
|||||||
if (Files.isRegularFile(file)) {
|
if (Files.isRegularFile(file)) {
|
||||||
FileTime time = Files.readAttributes(file, BasicFileAttributes.class).lastModifiedTime();
|
FileTime time = Files.readAttributes(file, BasicFileAttributes.class).lastModifiedTime();
|
||||||
if (time.toMillis() >= processStartTime) {
|
if (time.toMillis() >= processStartTime) {
|
||||||
try {
|
try (BufferedReader reader = Files.newBufferedReader(file, OperatingSystem.NATIVE_CHARSET)) {
|
||||||
String crashLog = Logger.filterForbiddenToken(FileUtils.readText(file, OperatingSystem.NATIVE_CHARSET));
|
zipper.putLines(reader.lines().map(Logger::filterForbiddenToken), file.getFileName().toString());
|
||||||
zipper.putTextFile(crashLog, file.getFileName().toString());
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.warning("Failed to read log file: " + file, e);
|
LOG.warning("Failed to read log file: " + file, e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,14 +19,12 @@ package org.jackhuang.hmcl.util.io;
|
|||||||
|
|
||||||
import org.jackhuang.hmcl.util.function.ExceptionalPredicate;
|
import org.jackhuang.hmcl.util.function.ExceptionalPredicate;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.*;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.*;
|
import java.nio.file.*;
|
||||||
import java.nio.file.attribute.BasicFileAttributes;
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
|
import java.util.stream.Stream;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipException;
|
import java.util.zip.ZipException;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
@@ -155,6 +153,27 @@ public final class Zipper implements Closeable {
|
|||||||
zos.closeEntry();
|
zos.closeEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void putLines(Stream<String> lines, String path) throws IOException {
|
||||||
|
zos.putNextEntry(new ZipEntry(normalize(path)));
|
||||||
|
|
||||||
|
try {
|
||||||
|
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(zos));
|
||||||
|
lines.forEachOrdered(line -> {
|
||||||
|
try {
|
||||||
|
writer.write(line);
|
||||||
|
writer.write('\n');
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new UncheckedIOException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
writer.flush();
|
||||||
|
} catch (UncheckedIOException e) {
|
||||||
|
throw e.getCause();
|
||||||
|
} finally {
|
||||||
|
zos.closeEntry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void putTextFile(String text, String path) throws IOException {
|
public void putTextFile(String text, String path) throws IOException {
|
||||||
putTextFile(text, StandardCharsets.UTF_8, path);
|
putTextFile(text, StandardCharsets.UTF_8, path);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user