Remove IOUtils.closeQuietly

This commit is contained in:
huanghongxun 2018-08-06 14:02:07 +08:00
parent 47031cb70e
commit cadafe13e1
5 changed files with 41 additions and 118 deletions

View File

@ -19,7 +19,6 @@ package org.jackhuang.hmcl.game;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.archivers.zip.ZipFile;
import org.jackhuang.hmcl.util.IOUtils;
import org.jenkinsci.constant_pool_scanner.ConstantPool; import org.jenkinsci.constant_pool_scanner.ConstantPool;
import org.jenkinsci.constant_pool_scanner.ConstantPoolScanner; import org.jenkinsci.constant_pool_scanner.ConstantPoolScanner;
import org.jenkinsci.constant_pool_scanner.ConstantType; import org.jenkinsci.constant_pool_scanner.ConstantType;
@ -72,9 +71,8 @@ public final class GameVersion {
if (file == null || !file.exists() || !file.isFile() || !file.canRead()) if (file == null || !file.exists() || !file.isFile() || !file.canRead())
return Optional.empty(); return Optional.empty();
ZipFile gameJar = null;
try { try {
gameJar = new ZipFile(file); try (ZipFile gameJar = new ZipFile(file)) {
ZipArchiveEntry minecraft = gameJar.getEntry("net/minecraft/client/Minecraft.class"); ZipArchiveEntry minecraft = gameJar.getEntry("net/minecraft/client/Minecraft.class");
if (minecraft != null) { if (minecraft != null) {
Optional<String> result = getVersionOfClassMinecraft(gameJar, minecraft); Optional<String> result = getVersionOfClassMinecraft(gameJar, minecraft);
@ -85,10 +83,9 @@ public final class GameVersion {
if (minecraftServer != null) if (minecraftServer != null)
return getVersionFromClassMinecraftServer(gameJar, minecraftServer); return getVersionFromClassMinecraftServer(gameJar, minecraftServer);
return Optional.empty(); return Optional.empty();
}
} catch (IOException e) { } catch (IOException e) {
return Optional.empty(); return Optional.empty();
} finally {
IOUtils.closeQuietly(gameJar);
} }
} }
} }

View File

@ -115,9 +115,21 @@ public class FileDownloadTask extends Task {
} }
private void closeFiles() { private void closeFiles() {
IOUtils.closeQuietly(rFile); if (rFile != null)
try {
rFile.close();
} catch (IOException e) {
Logging.LOG.log(Level.WARNING, "Failed to close file: " + rFile, e);
}
rFile = null; rFile = null;
IOUtils.closeQuietly(stream);
if (stream != null)
try {
stream.close();
} catch (IOException e) {
Logging.LOG.log(Level.WARNING, "Failed to close stream", e);
}
stream = null; stream = null;
} }

View File

@ -20,8 +20,8 @@ package org.jackhuang.hmcl.util;
import java.io.*; import java.io.*;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -70,9 +70,7 @@ public final class FileUtils {
} }
public static void writeBytes(File file, byte[] array) throws IOException { public static void writeBytes(File file, byte[] array) throws IOException {
try (FileOutputStream stream = new FileOutputStream(file)) { Files.write(file.toPath(), array);
stream.write(array);
}
} }
public static void deleteDirectory(File directory) public static void deleteDirectory(File directory)
@ -94,10 +92,6 @@ public final class FileUtils {
return Lang.test(() -> deleteDirectory(directory)); return Lang.test(() -> deleteDirectory(directory));
} }
public static boolean cleanDirectoryQuietly(File directory) {
return Lang.test(() -> cleanDirectory(directory));
}
public static void cleanDirectory(File directory) public static void cleanDirectory(File directory)
throws IOException { throws IOException {
if (!directory.exists()) { if (!directory.exists()) {
@ -159,65 +153,8 @@ public final class FileUtils {
return !fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile()); return !fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile());
} }
public static void copyDirectory(File srcDir, File destDir) public static void copyDirectory(Path src, Path dest) {
throws IOException {
copyDirectory(srcDir, destDir, null);
}
public static void copyDirectory(File srcDir, File destDir, FileFilter filter)
throws IOException {
Objects.requireNonNull(srcDir, "Source must not be null");
Objects.requireNonNull(destDir, "Destination must not be null");
if (!srcDir.exists())
throw new FileNotFoundException("Source '" + srcDir + "' does not exist");
if (!srcDir.isDirectory())
throw new IOException("Source '" + srcDir + "' exists but is not a directory");
if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath()))
throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same");
List<String> exclusionList = null;
if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) {
File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
if ((srcFiles != null) && (srcFiles.length > 0)) {
exclusionList = new ArrayList<>(srcFiles.length);
for (File srcFile : srcFiles) {
File copiedFile = new File(destDir, srcFile.getName());
exclusionList.add(copiedFile.getCanonicalPath());
}
}
}
doCopyDirectory(srcDir, destDir, filter, exclusionList);
}
private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter, List<String> exclusionList)
throws IOException {
File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
if (srcFiles == null)
throw new IOException("Failed to list contents of " + srcDir);
if (destDir.exists()) {
if (!destDir.isDirectory())
throw new IOException("Destination '" + destDir + "' exists but is not a directory");
} else if (!FileUtils.makeDirectory(destDir))
throw new IOException("Destination '" + destDir + "' directory cannot be created");
if (!destDir.canWrite())
throw new IOException("Destination '" + destDir + "' cannot be written to");
for (File srcFile : srcFiles) {
File dstFile = new File(destDir, srcFile.getName());
if ((exclusionList == null) || (!exclusionList.contains(srcFile.getCanonicalPath())))
if (srcFile.isDirectory())
doCopyDirectory(srcFile, dstFile, filter, exclusionList);
else
doCopyFile(srcFile, dstFile);
}
destDir.setLastModified(srcDir.lastModified());
}
public static void copyFileQuietly(File srcFile, File destFile) {
try {
copyFile(srcFile, destFile);
} catch (IOException ignore) {
}
} }
public static void copyFile(File srcFile, File destFile) public static void copyFile(File srcFile, File destFile)
@ -235,7 +172,8 @@ public final class FileUtils {
throw new IOException("Destination '" + parentFile + "' directory cannot be created"); throw new IOException("Destination '" + parentFile + "' directory cannot be created");
if (destFile.exists() && !destFile.canWrite()) if (destFile.exists() && !destFile.canWrite())
throw new IOException("Destination '" + destFile + "' exists but is read-only"); throw new IOException("Destination '" + destFile + "' exists but is read-only");
doCopyFile(srcFile, destFile);
Files.copy(srcFile.toPath(), destFile.toPath(), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
} }
public static void moveFile(File srcFile, File destFile) throws IOException { public static void moveFile(File srcFile, File destFile) throws IOException {
@ -243,11 +181,6 @@ public final class FileUtils {
srcFile.delete(); srcFile.delete();
} }
private static void doCopyFile(File srcFile, File destFile)
throws IOException {
Files.copy(srcFile.toPath(), destFile.toPath(), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
}
public static boolean makeDirectory(File directory) { public static boolean makeDirectory(File directory) {
return directory.isDirectory() || directory.mkdirs(); return directory.isDirectory() || directory.mkdirs();
} }

View File

@ -31,22 +31,11 @@ public final class IOUtils {
public static final int DEFAULT_BUFFER_SIZE = 8 * 1024; public static final int DEFAULT_BUFFER_SIZE = 8 * 1024;
public static void closeQuietly(Closeable closeable) {
try {
if (closeable != null)
closeable.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ByteArrayOutputStream readFully(InputStream stream) throws IOException { public static ByteArrayOutputStream readFully(InputStream stream) throws IOException {
try { try (InputStream is = stream) {
ByteArrayOutputStream result = new ByteArrayOutputStream(); ByteArrayOutputStream result = new ByteArrayOutputStream();
copyTo(stream, result); copyTo(is, result);
return result; return result;
} finally {
closeQuietly(stream);
} }
} }

View File

@ -84,30 +84,22 @@ public final class NetworkUtils {
con.setDoOutput(true); con.setDoOutput(true);
con.setRequestProperty("Content-Type", contentType + "; charset=utf-8"); con.setRequestProperty("Content-Type", contentType + "; charset=utf-8");
con.setRequestProperty("Content-Length", "" + bytes.length); con.setRequestProperty("Content-Length", "" + bytes.length);
OutputStream os = null; try (OutputStream os = con.getOutputStream()) {
try {
os = con.getOutputStream();
if (os != null)
os.write(bytes); os.write(bytes);
} finally {
IOUtils.closeQuietly(os);
} }
return readData(con); return readData(con);
} }
public static String readData(HttpURLConnection con) throws IOException { public static String readData(HttpURLConnection con) throws IOException {
InputStream is = null;
try { try {
is = con.getInputStream(); try (InputStream stdout = con.getInputStream()) {
return IOUtils.readFullyAsString(is, UTF_8); return IOUtils.readFullyAsString(stdout, UTF_8);
}
} catch (IOException e) { } catch (IOException e) {
IOUtils.closeQuietly(is); try (InputStream stderr = con.getErrorStream()) {
is = con.getErrorStream(); if (stderr == null) throw e;
if (is != null) return IOUtils.readFullyAsString(stderr, UTF_8);
return IOUtils.readFullyAsString(is, UTF_8); }
throw e;
} finally {
IOUtils.closeQuietly(is);
} }
} }