Открытие файла с двоеточиями в имени файла в Java (отображается как косая черта в MacOs Finder)

Эта проблема для Linux/Mac; Я даже не думаю, что файлы могли бы существовать с косой чертой, если бы они были разархивированы на коробку Windows.

Привет, у меня есть требование открыть файлы журнала, которые были выведены популярной системой BRO IDS. Файлы только для чтения, и мне нужно обрабатывать их содержимое без изменения имен файлов.

По некоторым причинам имена файлов Bro имеют следующий формат: "conn.19/00/00-22/00/00.log". (также.gz-версии этого, с косой чертой) Я попытался запустить последний экземпляр Bro на моем Mac с настройками по умолчанию, и он создал файлы журнала с тем же шаблоном прямой косой черты, так что это было сознательное решение, принятое кем-то другим, и я буду надо обойти.

При загрузке файла в качестве модульного теста Java, либо через

File("conn.19/00/00-22/00/00.log")

или по URL

getClass().getClassLoader().getResource("conn.19/00/00-22/00/00.log")

Я получаю ожидаемую проблему интерпретации прямой косой черты как несуществующего каталога.

** Я нашел кучу других опровергнутых вопросов о косых чертах в именах файлов, в основном от людей, которые хотели создать такие проблемы. Я ищу решение для борьбы с этими плохими именами файлов в Java.

Если я могу получить данные файла в InputStream, я буду золотой.

Обновление 1: это работает лучше как обновление, чем как комментарий, так как это меняет природу проблемы.

Я обнаружил, что в MacOS и, возможно, Linux, приложение Finder GUI показывает имена файлов с косой чертой, например:

Лог-файл Bro в MacOS Finder

Однако в терминале я вижу это:

Bro Log File в терминале

Наконец, команда File.list() также интерпретирует это следующим образом:

Таким образом, решение заключается в использовании символа двоеточия ":" при чтении в файле. Оказывается, это одна из черт кроличьей норы, которая может включать кодирование ":" в "%3a" или двойное кодирование в "%253a". Ни один из них еще не работал в моих перестановках.

См.: JDK-7037120: Нарушение личности в java.net.URI

Доступ к архивному файлу с двоеточием в имени файла вызывает исключение NullPointerException или AssertionError

0 ответов

Другие вопросы по тегам