Пакет java.io в Camel не может найти файл со специальным символом в заголовке - PullRequest
0 голосов
/ 19 октября 2019

Я смотрю на проблему с приложением Java (v1.8.0_192-b12), которое использует Apache Camel (v2.22.1) для опроса файлов из папки. Все отлично работает с файлами, которые не имеют специальных символов в заголовке, но когда файл содержит символы, такие как Å , происходит странное поведение:

  • верблюд выводит имя файла с?? - он не может напечатать фактический символ
  • при тестировании размера файла, он возвращает 0
  • , если мне удается обойти две вышеупомянутые точки, тогда java.io.FileNotFoundException выбрасывается

Мне удалось решить первые два пункта, затеняя один из классов Camel и заменив пакет java.io на java.nio, но все же не удалось полностью исправить поведение. Итак, на данный момент, похоже, что в java.io есть ошибка, которая была решена java.nio. Другими словами, файл извлекается, но после слов при попытке выполнить над ним какие-либо действия не удается (он больше не может найти его по имени). Исходный код - который возвращал файлы, которые после обработки потерпели неудачу после слов:

File directory = new File(fileName);
File[] dirFiles = directory.listFiles();

Рабочий код:

Stream<Path> stream = Files.list(Paths.get(fileName))
File[] dirFiles = stream.map(Path::toFile).toArray(File[]::new);

Папка с опросом через ftp и в Windows. Сервер опроса находится на Linux. Я также добавил iocharset=utf8, когда монтировал привод в конфигурациях /etc/fstab.

Я не нашел ни одной ссылки на известную проблему, которая напоминает то, с чем я сталкиваюсь.

Iтакже пытался продублировать среду в док-контейнере, чтобы иметь возможность проверить его локально, но, хотя у меня такая же настройка (та же ОС, java, файлы conf, сборка, файлы запуска и т. д.), я не смог воспроизвести его,Установка языкового стандарта UTF-8 и добавление параметра iocharset=utf8 при монтировании диска было достаточно.

Итак, вопрос в том, что является основной причиной такого поведения, когда файлы содержат специальные символы?

Дополнительная информация

  • Языковой стандарт установлен в UTF-8:

    LANG=en_US.UTF-8
    LANGUAGE=en_US:en
    LC_CTYPE="en_US.UTF-8"
    
  • Javaпроцесс уже начинается с -Dsun.jnu.encoding = UTF-8 и -Dfile.encoding = UTF-8 параметров.

  • lsКоманда внутри папки с опросом выводит список файлов с их фактическим именем, поэтому на уровне операционной системы не возникает проблем с кодировкой
...