diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/MCUtils.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/MCUtils.java index 9a629069f..9c692f68b 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/MCUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/MCUtils.java @@ -20,7 +20,6 @@ package org.jackhuang.hellominecraft.launcher.core; import java.io.File; import java.io.IOException; import org.jackhuang.hellominecraft.util.system.FileUtils; -import org.jackhuang.hellominecraft.util.system.IOUtils; import org.jackhuang.hellominecraft.util.system.OS; /** @@ -63,14 +62,11 @@ public final class MCUtils { } public static File getInitGameDir() { - File gameDir = IOUtils.currentDir(); - if (gameDir.exists()) { - gameDir = new File(gameDir, MCUtils.minecraft()); - if (!gameDir.exists()) { - File newFile = MCUtils.getLocation(); - if (newFile.exists()) - gameDir = newFile; - } + File gameDir = new File(MCUtils.minecraft()); + if (!gameDir.exists()) { + File newFile = MCUtils.getLocation(); + if (newFile.exists()) + gameDir = newFile; } return gameDir; } @@ -80,6 +76,6 @@ public final class MCUtils { public static void tryWriteProfile(File gameDir) throws IOException { File file = new File(gameDir, "launcher_profiles.json"); if (!file.exists()) - FileUtils.writeStringToFile(file, PROFILE); + FileUtils.write(file, PROFILE); } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsMojangLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsMojangLoader.java index 7342d64fb..ad24a5015 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsMojangLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsMojangLoader.java @@ -66,7 +66,7 @@ public class AssetsMojangLoader extends IAssetsHandler { public void executeTask() throws Throwable { if (!areDependTasksSucceeded) throw new IllegalStateException("Failed to get asset index"); - String result = FileUtils.readFileToString(f); + String result = FileUtils.read(f); if (StrUtils.isBlank(result)) throw new IllegalStateException("Index json is empty, please redownload it!"); AssetsIndex o = C.GSON.fromJson(result, AssetsIndex.class); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java index 7e366e016..626dbe7cf 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java @@ -133,7 +133,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { File objectsDir = new File(assetsDir, "objects"); File indexFile = new File(indexDir, assetVersion + ".json"); try { - AssetsIndex index = (AssetsIndex) C.GSON.fromJson(FileUtils.readFileToString(indexFile, "UTF-8"), AssetsIndex.class); + AssetsIndex index = (AssetsIndex) C.GSON.fromJson(FileUtils.read(indexFile, "UTF-8"), AssetsIndex.class); String hash = ((AssetsObject) index.getFileMap().get(name)).getHash(); return new File(objectsDir, hash.substring(0, 2) + "/" + hash); @@ -152,7 +152,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { return false; try { - String assetIndexContent = FileUtils.readFileToString(indexFile, "UTF-8"); + String assetIndexContent = FileUtils.read(indexFile, "UTF-8"); AssetsIndex index = (AssetsIndex) C.GSON.fromJson(assetIndexContent, AssetsIndex.class); if (index == null) @@ -180,7 +180,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { } try { - String assetIndexContent = FileUtils.readFileToString(indexFile, "UTF-8"); + String assetIndexContent = FileUtils.read(indexFile, "UTF-8"); AssetsIndex index = (AssetsIndex) C.GSON.fromJson(assetIndexContent, AssetsIndex.class); if (index == null) @@ -195,7 +195,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { if (original.exists()) { cnt++; if (!target.isFile()) - FileUtils.copyFile(original, target, false); + FileUtils.copyFile(original, target); } } // If the scale new format existent file is lower then 0.1, use the old format. diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java index e752c77ac..478ce10f5 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java @@ -85,7 +85,7 @@ public class MinecraftDownloadService extends IMinecraftDownloadService { if (mvj.exists() && !mvj.delete()) HMCLog.warn("Failed to delete " + mvj); try { - MinecraftVersion mv = C.GSON.fromJson(FileUtils.readFileToStringQuietly(new File(vpath, id + ".json")), MinecraftVersion.class); + MinecraftVersion mv = C.GSON.fromJson(FileUtils.readQuietly(new File(vpath, id + ".json")), MinecraftVersion.class); if (mv == null) throw new JsonSyntaxException("incorrect version"); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java index b9cd7f89c..cca25c86c 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java @@ -57,7 +57,7 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService @Override public Task downloadForge(String installId, InstallerVersion v) { - File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "forge-installer.jar"); + File filepath = IOUtils.tryGetCanonicalFile("forge-installer.jar"); if (v.installer == null) return null; else @@ -68,7 +68,7 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService @Override public Task downloadOptiFine(String installId, InstallerVersion v) { - File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "optifine-installer.jar"); + File filepath = IOUtils.tryGetCanonicalFile("optifine-installer.jar"); if (v.installer == null) return null; OptiFineDownloadFormatter task = new OptiFineDownloadFormatter(v.installer); @@ -79,7 +79,7 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService @Override public Task downloadLiteLoader(String installId, InstallerVersion v) { - File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "liteloader-universal.jar"); + File filepath = IOUtils.tryGetCanonicalFile("liteloader-universal.jar"); FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader"); return task.after(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task)) .after(new DeleteFileTask(filepath)); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java index a791ee688..0730b1366 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.system.Compressor; import org.jackhuang.hellominecraft.util.system.FileUtils; -import org.jackhuang.hellominecraft.util.system.IOUtils; /** * @@ -40,7 +39,7 @@ public class PackMinecraftInstaller { } public void install() throws IOException { - File file = new File(IOUtils.currentDir(), "HMCL-MERGE-TEMP"); + File file = new File("HMCL-MERGE-TEMP"); if (!file.exists() && !file.mkdirs()) HMCLog.warn("Failed to make directories: " + file); for (String src1 : src) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java index aa66230d1..64cbb1c10 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java @@ -79,7 +79,7 @@ public class OptiFineInstaller extends Task implements PreviousResultRegistrar callback); - /** - * Returns the thing like ".minecraft/resourcepacks". - * - * @return the thing - */ - public abstract File getResourcePacks(); - /** * * @param v should be resolved @@ -164,7 +157,7 @@ public abstract class IMinecraftProvider { * * @return if false, will break the launch process. */ - public abstract boolean onLaunch(); + public abstract boolean onLaunch(String id); public File baseDirectory() { return service.baseDirectory(); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java index 4a465baf7..d4090e91e 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java @@ -111,7 +111,7 @@ public class MinecraftVersionManager extends IMinecraftProvider { } MinecraftVersion mcVersion; try { - mcVersion = C.GSON.fromJson(FileUtils.readFileToString(jsonFile), MinecraftVersion.class); + mcVersion = C.GSON.fromJson(FileUtils.read(jsonFile), MinecraftVersion.class); if (mcVersion == null) throw new GameException("Wrong json format, got null."); } catch (Exception e) { @@ -119,7 +119,7 @@ public class MinecraftVersionManager extends IMinecraftProvider { if (MessageBox.Show(C.i18n("launcher.versions_json_not_formatted", id), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) { service.download().downloadMinecraftVersionJson(id); try { - mcVersion = C.GSON.fromJson(FileUtils.readFileToString(jsonFile), MinecraftVersion.class); + mcVersion = C.GSON.fromJson(FileUtils.read(jsonFile), MinecraftVersion.class); if (mcVersion == null) throw new GameException("Wrong json format, got null."); } catch (IOException | GameException | JsonSyntaxException ex) { @@ -164,7 +164,7 @@ public class MinecraftVersionManager extends IMinecraftProvider { public boolean renameVersion(String from, String to) { try { File fromJson = new File(versionRoot(from), from + ".json"); - MinecraftVersion mcVersion = C.GSON.fromJson(FileUtils.readFileToString(fromJson), MinecraftVersion.class); + MinecraftVersion mcVersion = C.GSON.fromJson(FileUtils.read(fromJson), MinecraftVersion.class); mcVersion.id = to; FileUtils.writeQuietly(fromJson, C.GSON.toJson(mcVersion)); File toDir = versionRoot(to); @@ -198,7 +198,7 @@ public class MinecraftVersionManager extends IMinecraftProvider { return false; if (callback != null) { File mvt = new File(versionRoot(id), id + ".json"); - MinecraftVersion v = C.GSON.fromJson(FileUtils.readFileToStringQuietly(mvt), MinecraftVersion.class); + MinecraftVersion v = C.GSON.fromJson(FileUtils.readQuietly(mvt), MinecraftVersion.class); if (v == null) return false; callback.accept(v); @@ -254,13 +254,8 @@ public class MinecraftVersionManager extends IMinecraftProvider { } @Override - public File getResourcePacks() { - return new File(service.baseDirectory(), "resourcepacks"); - } - - @Override - public boolean onLaunch() { - File resourcePacks = getResourcePacks(); + public boolean onLaunch(String id) { + File resourcePacks = new File(getRunDirectory(id), "resourcepacks"); if (!resourcePacks.exists() && !resourcePacks.mkdirs()) HMCLog.warn("Failed to make resourcePacks: " + resourcePacks); return true; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Profile.java index 7be42452a..344a01a8b 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Profile.java @@ -46,7 +46,7 @@ public final class Profile { } public Profile(String name) { - this(name, new File(IOUtils.currentDir(), ".minecraft").getPath()); + this(name, new File(".minecraft").getPath()); } public Profile(String name, String gameDir) { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java index 589f97dbc..2dcdbaccf 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java @@ -30,7 +30,6 @@ import org.jackhuang.hellominecraft.launcher.core.download.DownloadType; import org.jackhuang.hellominecraft.util.CollectionUtils; import org.jackhuang.hellominecraft.util.EventHandler; import org.jackhuang.hellominecraft.util.system.FileUtils; -import org.jackhuang.hellominecraft.util.system.IOUtils; import org.jackhuang.hellominecraft.util.MessageBox; import org.jackhuang.hellominecraft.util.UpdateChecker; @@ -43,7 +42,7 @@ public final class Settings { public static final String DEFAULT_PROFILE = "Default"; public static final String HOME_PROFILE = "Home"; - public static final File SETTINGS_FILE = new File(IOUtils.currentDir(), "hmcl.json"); + public static final File SETTINGS_FILE = new File("hmcl.json"); private static final Config SETTINGS; public static final UpdateChecker UPDATE_CHECKER = new UpdateChecker(Main.getVersionNumber(), "hmcl"); @@ -71,7 +70,7 @@ public final class Settings { Config c = new Config(); if (SETTINGS_FILE.exists()) try { - String str = FileUtils.readFileToString(SETTINGS_FILE); + String str = FileUtils.read(SETTINGS_FILE); if (str == null || str.trim().equals("")) HMCLog.log("Settings file is empty, use the default settings."); else { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form index bae054ac7..84a894241 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form @@ -406,10 +406,6 @@ - - - - @@ -418,6 +414,7 @@ + diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java index c544d03eb..dcd00e1a6 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java @@ -61,7 +61,6 @@ import org.jackhuang.hellominecraft.util.system.OS; import org.jackhuang.hellominecraft.util.StrUtils; import org.jackhuang.hellominecraft.util.func.Consumer; import org.jackhuang.hellominecraft.util.system.FileUtils; -import org.jackhuang.hellominecraft.util.system.IOUtils; import org.jackhuang.hellominecraft.util.ui.SwingUtils; import org.jackhuang.hellominecraft.util.system.Java; import org.jackhuang.hellominecraft.util.tasks.TaskWindow; @@ -1095,7 +1094,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget }//GEN-LAST:event_btnMakeLaunchScriptActionPerformed private void btnIncludeMinecraftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnIncludeMinecraftActionPerformed - JFileChooser fc = new JFileChooser(IOUtils.currentDir()); + JFileChooser fc = new JFileChooser(new File(".")); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { File newGameDir = fc.getSelectedFile(); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LaunchingUIDaemon.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LaunchingUIDaemon.java index bad70dd8c..1790f2c06 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LaunchingUIDaemon.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LaunchingUIDaemon.java @@ -109,7 +109,7 @@ public class LaunchingUIDaemon { } String msg = C.i18n("launch.exited_abnormally") + " exit code: " + t; if (errorText != null) - msg += ", advice: " + MinecraftCrashAdvicer.getAdvice(FileUtils.readFileToStringQuietly(new File(errorText))); + msg += ", advice: " + MinecraftCrashAdvicer.getAdvice(FileUtils.readQuietly(new File(errorText))); MessageBox.Show(msg); WebFrame f = new WebFrame(logs); f.setModal(true); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java index d500a5436..b94c4a3aa 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/HMCLMinecraftService.java @@ -91,7 +91,7 @@ public class HMCLMinecraftService extends IMinecraftService { VersionSetting vs = null; File f = new File(provider.versionRoot(id), "hmclversion.cfg"); if (f.exists()) { - String s = FileUtils.readFileToStringQuietly(f); + String s = FileUtils.readQuietly(f); if (s != null) try { vs = C.GSON.fromJson(s, VersionSetting.class); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java index 8b63bbd7b..784f64a34 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java @@ -81,7 +81,7 @@ public class AppDataUpgrader extends IUpgrader { try { File f = AppDataUpgraderTask.HMCL_VER_FILE; if (f.exists()) { - Map m = C.GSON.fromJson(FileUtils.readFileToString(f), Map.class); + Map m = C.GSON.fromJson(FileUtils.read(f), Map.class); String s = m.get("ver"); if (s != null && VersionNumber.check(s).compareTo(nowVersion) > 0) { String j = m.get("loc"); @@ -179,7 +179,7 @@ public class AppDataUpgrader extends IUpgrader { json.put("ver", newestVersion); json.put("loc", f.getAbsolutePath()); String result = C.GSON.toJson(json); - FileUtils.writeStringToFile(HMCL_VER_FILE, result); + FileUtils.write(HMCL_VER_FILE, result); } @Override diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java index a1572d07a..a32dcbdf7 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java @@ -24,7 +24,8 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; import org.jackhuang.hellominecraft.util.logging.HMCLog; @@ -134,20 +135,10 @@ public class FileUtils { public static void copyDirectory(File srcDir, File destDir) throws IOException { - copyDirectory(srcDir, destDir, true); - } - - public static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate) - throws IOException { - copyDirectory(srcDir, destDir, null, preserveFileDate); + copyDirectory(srcDir, destDir, null); } public static void copyDirectory(File srcDir, File destDir, FileFilter filter) - throws IOException { - copyDirectory(srcDir, destDir, filter, true); - } - - public static void copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate) throws IOException { if (srcDir == null) throw new NullPointerException("Source must not be null"); @@ -171,10 +162,10 @@ public class FileUtils { } } } - doCopyDirectory(srcDir, destDir, filter, preserveFileDate, exclusionList); + doCopyDirectory(srcDir, destDir, filter, exclusionList); } - private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate, List exclusionList) + private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter, List exclusionList) throws IOException { File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter); if (srcFiles == null) @@ -191,22 +182,19 @@ public class FileUtils { File dstFile = new File(destDir, srcFile.getName()); if ((exclusionList == null) || (!exclusionList.contains(srcFile.getCanonicalPath()))) if (srcFile.isDirectory()) - doCopyDirectory(srcFile, dstFile, filter, preserveFileDate, exclusionList); + doCopyDirectory(srcFile, dstFile, filter, exclusionList); else - doCopyFile(srcFile, dstFile, preserveFileDate); - + doCopyFile(srcFile, dstFile); } - - if (preserveFileDate) - destDir.setLastModified(srcDir.lastModified()); + destDir.setLastModified(srcDir.lastModified()); } - public static String readFileToString(File file) + public static String read(File file) throws IOException { return NetUtils.getStreamContent(IOUtils.openInputStream(file)); } - public static String readFileToStringQuietly(File file) { + public static String readQuietly(File file) { try { return NetUtils.getStreamContent(IOUtils.openInputStream(file)); } catch (IOException ex) { @@ -215,12 +203,12 @@ public class FileUtils { } } - public static String readFileToString(File file, String charset) + public static String read(File file, String charset) throws IOException { return NetUtils.getStreamContent(IOUtils.openInputStream(file), charset); } - public static String readFileToStringIgnoreFileNotFound(File file) throws IOException { + public static String readIgnoreFileNotFound(File file) throws IOException { try { return NetUtils.getStreamContent(IOUtils.openInputStream(file)); } catch (FileNotFoundException ex) { @@ -237,11 +225,6 @@ public class FileUtils { } public static void copyFile(File srcFile, File destFile) - throws IOException { - copyFile(srcFile, destFile, true); - } - - public static void copyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException { if (srcFile == null) throw new NullPointerException("Source must not be null"); @@ -260,42 +243,12 @@ public class FileUtils { if ((destFile.exists()) && (!destFile.canWrite())) throw new IOException("Destination '" + destFile + "' exists but is read-only"); - doCopyFile(srcFile, destFile, preserveFileDate); + doCopyFile(srcFile, destFile); } - private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) + public static void doCopyFile(File srcFile, File destFile) throws IOException { - if ((destFile.exists()) && (destFile.isDirectory())) - throw new IOException("Destination '" + destFile + "' exists but is a directory"); - - FileInputStream fis = null; - FileOutputStream fos = null; - FileChannel input = null; - FileChannel output = null; - try { - fis = new FileInputStream(srcFile); - fos = new FileOutputStream(destFile); - input = fis.getChannel(); - output = fos.getChannel(); - long size = input.size(); - long pos = 0L; - long count; - while (pos < size) { - count = size - pos > 31457280L ? 31457280L : size - pos; - pos += output.transferFrom(input, pos, count); - } - } finally { - IOUtils.closeQuietly(output); - IOUtils.closeQuietly(fos); - IOUtils.closeQuietly(input); - IOUtils.closeQuietly(fis); - } - - if (srcFile.length() != destFile.length()) - throw new IOException("Failed to copy full contents from '" + srcFile + "' to '" + destFile + "'"); - - if (preserveFileDate) - destFile.setLastModified(srcFile.lastModified()); + Files.copy(srcFile.toPath(), destFile.toPath(), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING); } public static int indexOfLastSeparator(String filename) { @@ -350,9 +303,9 @@ public class FileUtils { return filename.substring(0, index); } - public static boolean writeQuietly(File file, CharSequence data) { + public static boolean writeQuietly(File file, String data) { try { - write(file, data); + FileUtils.write(file, data); return true; } catch (IOException e) { HMCLog.warn("Failed to write data to file: " + file, e); @@ -360,38 +313,17 @@ public class FileUtils { } } - public static void write(File file, CharSequence data) + public static void write(File file, String data) throws IOException { write(file, data, "UTF-8", false); } - public static void write(File file, CharSequence data, boolean append) - throws IOException { - write(file, data, "UTF-8", append); - } - - public static void write(File file, CharSequence data, String encoding) + public static void write(File file, String data, String encoding) throws IOException { write(file, data, encoding, false); } - public static void write(File file, CharSequence data, String encoding, boolean append) - throws IOException { - String str = data == null ? null : data.toString(); - writeStringToFile(file, str, encoding, append); - } - - public static void writeStringToFile(File file, String data) - throws IOException { - writeStringToFile(file, data, "UTF-8", false); - } - - public static void writeStringToFile(File file, String data, String encoding) - throws IOException { - writeStringToFile(file, data, encoding, false); - } - - public static void writeStringToFile(File file, String data, String encoding, boolean append) + public static void write(File file, String data, String encoding, boolean append) throws IOException { OutputStream out = null; try { diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java index 151aad8fb..124ae8ebe 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java @@ -27,8 +27,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.Reader; -import java.io.Writer; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.NetworkInterface; @@ -37,6 +35,7 @@ import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +import org.jackhuang.hellominecraft.util.func.Consumer; import org.jackhuang.hellominecraft.util.logging.HMCLog; /** @@ -85,40 +84,24 @@ public class IOUtils { return t.substring(i + 1, (t.length() - i) + (i + 1) - 1); } - public static ArrayList findAllFile(File f) { - ArrayList arr = new ArrayList<>(); + public static void findAllFile(File f, Consumer callback) { if (f.isDirectory()) { File[] f1 = f.listFiles(); int len = f1.length; for (int i = 0; i < len; i++) if (f1[i].isFile()) - arr.add(f1[i].getName()); + callback.accept(f1[i].getName()); } - return arr; } - public static ArrayList findAllFileWithFullName(File f) { - ArrayList arr = new ArrayList<>(); - if (f.isDirectory()) { - File[] f1 = f.listFiles(); - int len = f1.length; - for (int i = 0; i < len; i++) - if (f1[i].isFile()) - arr.add(addSeparator(f.getAbsolutePath()) + f1[i].getName()); - } - return arr; - } - - public static ArrayList findAllDir(File f) { - ArrayList arr = new ArrayList<>(); + public static void findAllDir(File f, Consumer callback) { if (f.isDirectory()) { File[] f1 = f.listFiles(); int len = f1.length; for (int i = 0; i < len; i++) if (f1[i].isDirectory()) - arr.add(f1[i].getName()); + callback.accept(f1[i].getName()); } - return arr; } public static String getRealPath() { @@ -139,14 +122,6 @@ public class IOUtils { return path.startsWith("/") || path.indexOf(":") > 0; } - public static File currentDir() { - return new File("."); - } - - public static String currentDirWithSeparator() { - return addSeparator(currentDir().getAbsolutePath()); - } - public static String getLocalMAC() { InetAddress addr; try { @@ -221,22 +196,6 @@ public class IOUtils { return entryBuffer; } - public static void closeQuietly(Reader input) { - closeQuietly((Closeable) input); - } - - public static void closeQuietly(Writer output) { - closeQuietly((Closeable) output); - } - - public static void closeQuietly(InputStream input) { - closeQuietly((Closeable) input); - } - - public static void closeQuietly(OutputStream output) { - closeQuietly((Closeable) output); - } - public static void closeQuietly(Closeable closeable) { try { if (closeable != null) diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java index 1fe2155fe..904f0cf4a 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java @@ -109,7 +109,7 @@ public enum OS { } public static String getLinuxReleaseVersion() throws IOException { - return FileUtils.readFileToString(new File("/etc/issue")); + return FileUtils.read(new File("/etc/issue")); } public static String getSystemVersion() { diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/BackupManager.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/BackupManager.java index 7bfc36a3e..0753a6579 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/BackupManager.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/BackupManager.java @@ -20,12 +20,12 @@ package org.jackhuang.hellominecraft.svrmgr.server; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.system.Compressor; import org.jackhuang.hellominecraft.svrmgr.setting.SettingsManager; import org.jackhuang.hellominecraft.svrmgr.util.Utilities; +import org.jackhuang.hellominecraft.util.func.Consumer; import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.system.IOUtils; @@ -39,9 +39,8 @@ public class BackupManager { return Utilities.getGameDir() + "backups-HMCSM" + File.separator; } - public static ArrayList getBackupList() { - String gameDir = backupDir(); - return IOUtils.findAllFile(new File(gameDir)); + public static void getBackupList(Consumer c) { + IOUtils.findAllFile(new File(backupDir()), c); } public static void addWorldBackup(final String folder) { @@ -61,17 +60,15 @@ public class BackupManager { t.start(); } - public static ArrayList findAllWorlds() { + public static void findAllWorlds(Consumer callback) { String gameDir = Utilities.getGameDir(); - ArrayList folders = IOUtils.findAllDir(new File(gameDir)); - ArrayList result = new ArrayList<>(); - for (String folder : folders) { - String worldPath = gameDir + folder + File.separator; - ArrayList files = IOUtils.findAllFile(new File(worldPath)); - if (files.contains("level.dat")) - result.add(folder); - } - return result; + IOUtils.findAllDir(new File(gameDir), folder -> { + String worldPath = gameDir + folder + File.separator; + IOUtils.findAllFile(new File(worldPath), f -> { + if ("level.dat".equals(f)) + callback.accept(folder); + }); + }); } public static void restoreBackup(File backupFile) { @@ -89,10 +86,10 @@ public class BackupManager { } public static void backupAllWorlds() { - ArrayList al = findAllWorlds(); - for (String world : al) + findAllWorlds(world -> { if (!SettingsManager.settings.inactiveWorlds.contains(world)) addWorldBackup(world); + }); } public static void backupAllPlugins() { diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java index 4d2756508..b0236de4a 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java @@ -90,7 +90,7 @@ public abstract class PlayerList { op = null; if (txt.exists()) try { - initByText(FileUtils.readFileToStringIgnoreFileNotFound(txt)); + initByText(FileUtils.readIgnoreFileNotFound(txt)); if (op != null) player.addAll(op); } catch (IOException e) { diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/SettingsManager.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/SettingsManager.java index db3a76977..d4ab35eb6 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/SettingsManager.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/SettingsManager.java @@ -26,7 +26,6 @@ import java.io.File; import java.io.IOException; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.system.FileUtils; -import org.jackhuang.hellominecraft.util.system.IOUtils; /** * @@ -37,13 +36,13 @@ public class SettingsManager { public static Settings settings; public static boolean isFirstLoad = false; static Gson gson; + private static final File file = new File("hmcsm.json"); public static void load() { gson = new Gson(); - File file = new File(IOUtils.currentDir(), "hmcsm.json"); if (file.exists()) try { - String str = FileUtils.readFileToString(file); + String str = FileUtils.read(file); if (str == null || str.trim().equals("")) init(); else @@ -64,9 +63,8 @@ public class SettingsManager { } public static void save() { - File f = new File(IOUtils.currentDir(), "hmcsm.json"); try { - FileUtils.write(f, gson.toJson(settings)); + FileUtils.write(file, gson.toJson(settings)); } catch (IOException ex) { HMCLog.err("Failed to save settings.", ex); } diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java index 7b726fed8..d1cd4f674 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java @@ -2781,13 +2781,12 @@ public final class MainWindow extends javax.swing.JFrame String path = Utilities.getPath("mods"); if (path == null) return; - ArrayList sl = IOUtils.findAllFile(new File(path)); DefaultTableModel model = (DefaultTableModel) lstExternalMods.getModel(); while (model.getRowCount() > 0) model.removeRow(0); - for (String s : sl) - model.addRow(new Object[] { !SettingsManager.settings.inactiveExtMods.contains(s), s, ModType.getModTypeShowName(ModType.getModType(IOUtils.addSeparator(path) + s)) }); - + IOUtils.findAllFile(new File(path), s + -> model.addRow(new Object[] { !SettingsManager.settings.inactiveExtMods.contains(s), s, ModType.getModTypeShowName(ModType.getModType(IOUtils.addSeparator(path) + s)) }) + ); lstExternalMods.updateUI(); } @@ -2795,19 +2794,18 @@ public final class MainWindow extends javax.swing.JFrame String path = Utilities.getPath("plugins"); if (path == null) return; - ArrayList sl = IOUtils.findAllFile(new File(path)); DefaultTableModel model = (DefaultTableModel) lstPlugins.getModel(); while (model.getRowCount() > 0) model.removeRow(0); - for (String s : sl) { - PluginInformation p = PluginManager.getPluginYML(new File(Utilities.getGameDir() + "plugins" + File.separator + s)); - if (p == null) - model.addRow(new Object[] { !SettingsManager.settings.inactivePlugins.contains(s), s, - "", "", "", "" }); - else - model.addRow(new Object[] { !SettingsManager.settings.inactivePlugins.contains(s), s, - p.name, p.version, p.author, p.description }); - } + IOUtils.findAllFile(new File(path), s -> { + PluginInformation p = PluginManager.getPluginYML(new File(Utilities.getGameDir() + "plugins" + File.separator + s)); + if (p == null) + model.addRow(new Object[] { !SettingsManager.settings.inactivePlugins.contains(s), s, + "", "", "", "" }); + else + model.addRow(new Object[] { !SettingsManager.settings.inactivePlugins.contains(s), s, + p.name, p.version, p.author, p.description }); + }); lstPlugins.updateUI(); } @@ -2816,37 +2814,35 @@ public final class MainWindow extends javax.swing.JFrame String path = Utilities.getPath("coremods"); if (path == null) return; - ArrayList sl = IOUtils.findAllFile(new File(path)); DefaultTableModel model = (DefaultTableModel) lstCoreMods.getModel(); while (model.getRowCount() > 0) model.removeRow(0); - for (String s : sl) - model.addRow(new Object[] { !SettingsManager.settings.inactiveCoreMods.contains(s), s, ModType.getModTypeShowName(ModType.getModType(IOUtils.addSeparator(path) + s)) }); + IOUtils.findAllFile(new File(path), s + -> model.addRow(new Object[] { !SettingsManager.settings.inactiveCoreMods.contains(s), s, ModType.getModTypeShowName(ModType.getModType(IOUtils.addSeparator(path) + s)) })); lstCoreMods.updateUI(); } void loadWorlds() { - ArrayList s = BackupManager.findAllWorlds(); DefaultTableModel model = (DefaultTableModel) lstWorlds.getModel(); if (SettingsManager.settings.inactiveWorlds == null) SettingsManager.settings.inactiveWorlds = new ArrayList<>(); - for (String world : s) + BackupManager.findAllWorlds(world -> { model.addRow(new Object[] { world, Utilities.getGameDir() + world, !SettingsManager.settings.inactiveWorlds.contains(world) }); + }); lstWorlds.updateUI(); } void loadBackups() { - ArrayList al = BackupManager.getBackupList(); DefaultTableModel model = (DefaultTableModel) lstBackups.getModel(); - for (String backup : al) { + BackupManager.getBackupList(backup -> { String[] names = FileUtils.getExtension(backup).split("\\+"); model.addRow(new Object[] { names[0], names[1], names[2] }); - } + }); lstBackups.updateUI(); } @@ -3007,17 +3003,16 @@ public final class MainWindow extends javax.swing.JFrame } void refreshInfos() { - ArrayList al = IOUtils.findAllFile(new File(Utilities.getGameDir() + "infos-HMCSM")); DefaultTableModel model = (DefaultTableModel) lstInfos.getModel(); - for (String s : al) - model.addRow(new Object[] { s, FileUtils.getExtension(s) }); + while (model.getRowCount() > 0) + model.removeRow(0); + IOUtils.findAllFile(new File(Utilities.getGameDir() + "infos-HMCSM"), s -> model.addRow(new Object[] { s, FileUtils.getExtension(s) })); lstInfos.updateUI(); } void refreshReports() { - ArrayList al = IOUtils.findAllFile(new File(Utilities.getGameDir() + "crash-reports")); - for (String s : al) - lstCrashReportsModel.addElement(s); + lstCrashReportsModel.clear(); + IOUtils.findAllFile(new File(Utilities.getGameDir() + "crash-reports"), s -> lstCrashReportsModel.addElement(s)); lstReports.setModel(lstCrashReportsModel); } @@ -3721,7 +3716,7 @@ public final class MainWindow extends javax.swing.JFrame String id = (String) lstDownloads.getModel().getValueAt(lstDownloads.getSelectedRow(), 0); final String MC_DOWNLOAD_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/"; String url = MC_DOWNLOAD_URL + id + "/"; - File serverjar = new File(IOUtils.currentDir(), "minecraft_server." + id + ".jar"); + File serverjar = new File("minecraft_server." + id + ".jar"); serverjar.delete(); String downloadURL = url + "minecraft_server." + id + ".jar"; @@ -3739,7 +3734,7 @@ public final class MainWindow extends javax.swing.JFrame if (index == -1) return; String path = Utilities.getGameDir() + "infos-HMCSM" + File.separator + model.getValueAt(index, 0); - String content = FileUtils.readFileToString(new File(path)); + String content = FileUtils.read(new File(path)); txtInfo.setText(content); } catch (IOException ex) { HMCLog.warn("Failed to read info.", ex); @@ -3747,14 +3742,14 @@ public final class MainWindow extends javax.swing.JFrame }//GEN-LAST:event_btnShowInfoActionPerformed private void btnAutoSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAutoSearchActionPerformed - ArrayList al = IOUtils.findAllFile(IOUtils.currentDir()); - for (String s : al) - if (ServerChecker.isServerJar(new File(s))) { - String path = IOUtils.tryGetCanonicalFilePath(new File(IOUtils.currentDir(), s)); - txtMainJar.setText(path); - SettingsManager.settings.mainjar = path; - SettingsManager.save(); - } + IOUtils.findAllFile(new File("."), s -> { + if (ServerChecker.isServerJar(new File(s))) { + String path = IOUtils.tryGetCanonicalFilePath(new File(s)); + txtMainJar.setText(path); + SettingsManager.settings.mainjar = path; + SettingsManager.save(); + } + }); }//GEN-LAST:event_btnAutoSearchActionPerformed private void cboCategoryItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboCategoryItemStateChanged @@ -3784,7 +3779,7 @@ public final class MainWindow extends javax.swing.JFrame if (index == -1) return; String path = Utilities.getGameDir() + "crash-reports" + File.separator + lstCrashReportsModel.get(index); - String content = FileUtils.readFileToString(new File(path)); + String content = FileUtils.read(new File(path)); txtCrashReport.setText(content); } catch (IOException ex) { HMCLog.warn("Failed to get crash-report.", ex); @@ -3858,7 +3853,7 @@ public final class MainWindow extends javax.swing.JFrame return; } BukkitVersion v = cb.get(idx); - File file = new File(IOUtils.currentDir(), "craftbukkit-" + ext + "-" + v.version + ".jar"); + File file = new File("craftbukkit-" + ext + "-" + v.version + ".jar"); TaskWindow.factory().append(new FileDownloadTask(v.downloadLink, IOUtils.tryGetCanonicalFile(file)).setTag("bukkit-" + ext + "-" + v.version)) .create(); }//GEN-LAST:event_btnDownloadCraftbukkitActionPerformed @@ -3869,7 +3864,7 @@ public final class MainWindow extends javax.swing.JFrame return; ForgeVersion v = mcpcPackages.get(cboCauldronMinecraft.getSelectedItem().toString()).get(idx); String url; - File filepath = new File(IOUtils.currentDir(), "forge-installer.jar"); + File filepath = new File("forge-installer.jar"); url = v.installer[1]; if (!TaskWindow.factory().append(new FileDownloadTask(url, filepath).setTag("cauldron-" + v.ver)).create()) MessageBox.Show(C.i18n("install.failed_download_forge")); @@ -3879,7 +3874,7 @@ public final class MainWindow extends javax.swing.JFrame private void installMCPC(final File filepath) { try { - ForgeInstaller installer = new ForgeInstaller(IOUtils.currentDir(), filepath); + ForgeInstaller installer = new ForgeInstaller(new File("."), filepath); installer.install(); MessageBox.Show(C.i18n("install.success")); } catch (Exception e) { @@ -3910,7 +3905,7 @@ public final class MainWindow extends javax.swing.JFrame }//GEN-LAST:event_cboCauldronMinecraftItemStateChanged private void btnInstallMCPCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnInstallMCPCActionPerformed - File filepath = new File(IOUtils.currentDir(), "forge-installer.jar"); + File filepath = new File("forge-installer.jar"); if (!filepath.exists()) { MessageBox.Show("您还未下载Cauldron!请点击下载按钮下载并自动安装!"); return;