Я пытаюсь прочитать файлы со специальными символами в имени в системе Linux. У меня нет никакого контроля над операционной системой.
Я пытался использовать IO и NIO. Я продолжаю получать
java.nio.file.InvalidPathException: неправильно сформированный ввод или ввод содержит
не отображаемые символы: / mnt / Au? enr? ckspiegel, elektrisch verstellbar, 1, edition-meta.xml
Я не могу многое изменить на сервере, могу ли я что-нибудь сделать, чтобы решить эту проблему в моем приложении?
System.out.println("Default Charset=" + Charset.defaultCharset()); // US_ASCII
Это дает мне строку с вопросительными знаками для специальных символов "/mnt/Au?sen.xml"
Files.list(Paths.get(path)).forEach(file -> {
log.info("file to string: " + file.toString());
String correctedFileName = "";
correctedFileName = new String(file.getFileName().toString().getBytes(StandardCharsets.ISO_8859_1),
StandardCharsets.UTF_8);
log.info("corrected name: " + correctedFileName);
try {
ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(Paths.get(correctedFileName)));
ZipEntry entry = zipInputStream.getNextEntry();
while (entry != null) {
Path filePath = Paths.get(unzipLocation, entry.getName());
if (!entry.isDirectory()) {
unzipFiles(zipInputStream, filePath);
} else {
Files.createDirectories(filePath);
}
zipInputStream.closeEntry();
entry = zipInputStream.getNextEntry();
}
} catch (IOException e) {
e.printStackTrace();
}
});