Java 8: чтение файлов со специальными символами в имени - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь прочитать файлы со специальными символами в имени в системе 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();
        }

    });

1 Ответ

0 голосов
/ 30 октября 2018

вы можете попытаться проанализировать имя файла как URI для решения таких проблем ..

Пример:

File file = new File(path);
URI uri = file.toURI();
String asciiURI = uri.toASCIIString();
...