From e0ebb02530cd745be5627ca5062f9f1c8424c93e Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 10 Oct 2019 15:53:47 +0800 Subject: [PATCH] Fix: java.nio.file.InvalidPathException --- .../jackhuang/hmcl/ui/versions/WorldListPage.java | 4 ++++ .../main/java/org/jackhuang/hmcl/game/World.java | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java index 430d247b6..2220abdd2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java @@ -33,7 +33,9 @@ import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; +import java.io.IOException; import java.nio.file.FileAlreadyExistsException; +import java.nio.file.InvalidPathException; import java.nio.file.Path; import java.util.Arrays; import java.util.List; @@ -117,6 +119,8 @@ public class WorldListPage extends ListPageBase { }, e -> { if (e instanceof FileAlreadyExistsException) reject.accept(i18n("world.import.failed", i18n("world.import.already_exists"))); + else if (e instanceof IOException && e.getCause() instanceof InvalidPathException) + reject.accept(i18n("world.import.failed", i18n("install.new_game.malformed"))); else reject.accept(i18n("world.import.failed", e.getClass().getName() + ": " + e.getLocalizedMessage())); }).start(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java index f1a9809ea..502e56875 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/World.java @@ -32,10 +32,7 @@ import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.nio.file.FileAlreadyExistsException; -import java.nio.file.FileSystem; -import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.*; import java.util.List; import java.util.logging.Level; import java.util.stream.Collectors; @@ -157,7 +154,13 @@ public class World { } public void install(Path savesDir, String name) throws IOException { - Path worldDir = savesDir.resolve(name); + Path worldDir; + try { + worldDir = savesDir.resolve(name); + } catch (InvalidPathException e) { + throw new IOException(e); + } + if (Files.isDirectory(worldDir)) { throw new FileAlreadyExistsException("World already exists"); }