Я читал тонны постов с переполнением стека о кодировках путей Java и правильных способах управления путями файлов.Я читал .Тем не менее, я не могу понять, как правильно управлять моим путем к файлу.
То, чего я хочу достичь, довольно просто: получить путь к файлу * .jar, закодированный надлежащим образом (чтобы без «% 20» и специальных специальных символов, правильно управляемых), чтобы я мог использовать его каквход в FileInputStream (): таким образом, я могу использовать его для загрузки файла свойств, который находится в той же папке вышеупомянутого * .jar.
Я прочитал документацию по Java и понял, что URLDecoderпросто экранирует специальные символы (например, "+") с пробелами, поэтому я не могу точно определить, какую комбинацию методов я должен использовать, чтобы получить абсолютный путь к файлу, даже если его папки (не по моей вине) содержат белый цветпробелы и указанные символы.Это мой метод:
private FileInputStream loadInputPropertiesFile() {
FileInputStream input = null;
// Let's load the properties file from the *.jar file parent folder.
File jarPath = new File(PropertiesManagement.class.getProtectionDomain().getCodeSource().getLocation().getPath());
String propertiesPath = String.format("%s/", jarPath.getParentFile().getAbsolutePath());
propertiesPath = URLDecoder.decode(propertiesPath, StandardCharsets.UTF_8);
// This part has been added just for tests, to better understand how file paths were encoded.
try {
URL url = jarPath.toURI().toURL();
File path = Paths.get(url.toURI()).toFile();
System.out.println(path);
} catch (MalformedURLException | URISyntaxException e) {
e.printStackTrace();
}
try {
input = new FileInputStream(propertiesPath + CONFIG_FILE_PATH);
} catch (FileNotFoundException e) {
System.out.println("Properties file not found! Have you deleted it?");
e.printStackTrace();
}
return input;
}
РЕДАКТИРОВАТЬ
Путь к файлу, который я хотел бы получить, выглядит примерно так: "C: \ Some + Folder \ x64 \".
В конце возвращаемый ввод должен выглядеть примерно так: «C: \ Some + Folder \ x64 \ config.properties».