From b2138ca99bbeed4d0c23229a29dc9dd6536ada78 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Fri, 3 Jan 2020 19:20:34 +0100 Subject: [PATCH] Fix NoSuchFileException caused by URL encoding The Jar URL has to get URL-decoded before it can be used as a path --- .../main/java/ctbrec/docs/AbstractDocServlet.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/src/main/java/ctbrec/docs/AbstractDocServlet.java b/client/src/main/java/ctbrec/docs/AbstractDocServlet.java index fb3e0d7d..5dd00904 100644 --- a/client/src/main/java/ctbrec/docs/AbstractDocServlet.java +++ b/client/src/main/java/ctbrec/docs/AbstractDocServlet.java @@ -6,7 +6,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.List; @@ -50,10 +53,10 @@ public abstract class AbstractDocServlet extends HttpServlet { List pages = new ArrayList<>(); URL resource = getClass().getResource("/html/docs"); if(Objects.equals(resource.getProtocol(), "file")) { - LOG.debug("FILE {}", resource.toString()); + LOG.debug("FILE {}", resource); indexDirectory(resource, pages); } else if(Objects.equals(resource.getProtocol(), "jar")) { - LOG.debug("JAR {}", resource.toString()); + LOG.debug("JAR {}", resource); indexJar(resource, pages); } pages.add("index.md"); @@ -63,6 +66,7 @@ public abstract class AbstractDocServlet extends HttpServlet { private void indexJar(URL resource, List pages) throws IOException { String fileUrl = resource.getFile(); + fileUrl = URLDecoder.decode(fileUrl, StandardCharsets.UTF_8); int colon = fileUrl.indexOf(':'); int exclamation = fileUrl.indexOf('!'); String jar = fileUrl.substring(colon + 1, exclamation); @@ -82,9 +86,7 @@ public abstract class AbstractDocServlet extends HttpServlet { private void indexDirectory(URL resource, List pages) { File docs = new File(resource.getFile()); String[] files = docs.list((dir, name) -> name.toLowerCase().endsWith(".md")); - for (String file : files) { - pages.add(file); - } + pages.addAll(Arrays.asList(files)); } String loadMarkdown(String path) throws IOException {