Перемещение Java-приложения из нечувствительной к регистру файловой системы в чувствительную к регистру - PullRequest
4 голосов
/ 22 февраля 2012

Мы выполняем наш Java-код на серверах Windows уже много лет. Мы хотим запускать один и тот же код на некоторых блоках FreeBSD, но наш код вырос в среде, в которой имя файла / пути не чувствительно к регистру так долго, что большая часть кода сломается.

То, что я хочу сделать, это какой-то трюк, когда мы создаем подкласс File или FileSystem, или какой-то подобный трюк, и это заставляет все наши имена файлов в нижнем регистре (все время).

Это кажется вполне возможным (т.е. расширить File новым классом OurFile, который принудительно вводит все строчные буквы). Затем мы запустим скрипт, который превращает все файлы / папки в нижний регистр ОС и bam, исправляя ошибки.

Кажется, что некоторые подобные взломы с новой реализацией FileSystem также дадут хороший результат.

Тогда я подумал - наверняка кто-то до меня сталкивался с этой проблемой и хорошо ее облизал.

Итак, что там за мудрость? Существует ли простой / стандартный способ решения проблемы чувствительности к регистру? (то есть кто-то написал, что LowerCaseFileSystemForPortingWindowsToUnix расширяет FileSystem, проверяет ее и т. д .?)

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Рассматривали ли вы исправить свой код?Из вашего описания вы, похоже, имеете много ссылок на файлы / ресурсы, которые «нечувствительны к регистру» (то есть, просто говоря, неверны) имен в коде ... Это можно сделать, адаптировав имена файлов к тому, как на них ссылаются вкод (только если есть какие-то последствия в коде, fg все имена файлов в нижнем регистре) или адаптировать константы в коде для соответствия именам файлов.

Любые переходы к классам java.io потребуют перечислить все файлы / каталоги в любом месте пути и попытаться найти имя, которое будет соответствовать пути.Однако в системе U ** x у вас может быть каталог resources, Resources и т. Д., Какой из них вы бы выбрали для пути 'RESOURCES / IMAGES / MYIMAGE.PNG'?Кроме того, у вас могут возникнуть проблемы с производительностью операций ввода-вывода.

Я однажды «исправил» такой проект, к счастью, он был довольно маленьким, но это очень раздражало.К счастью, некоторые операции могут быть записаны в сценарии, например, изменение всех констант в одном файле на строчные буквы и прописные буквы всех имен файлов изображений и т. Д.

0 голосов
/ 23 февраля 2012

Если ваши методы доступа к файлу проходят через небольшое количество классов (например, new File(String filename)), вы можете использовать AspectJ для добавления в некоторый код, который изменяет регистр имени файла при его прохождении.

Что-то вроде:

@Around(value = "newFile(context)", argNames = "point")
public Object requiresNew(ProceedingJoinPoint point) throws Throwable {

  String filename = (String) point.getArgs()[0];
  return point.proceed(new String[] { filename.toLowerCase() });
}

Это, вероятно, будет намного менее навязчиво для вашей кодовой базы, чем расширение File, плюс это даст вам стратегию выхода:

  1. log.warn() все пропущенные имена файлов, которые не являются полностью строчными.
  2. Исправьте предупреждения по мере их появления.
  3. Удалите аспект, как только он будет помещен в
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...