Java, оценивая широкое использование URL вместо файла - PullRequest
2 голосов
/ 20 января 2012

В настольном Java-приложении я часто использую ссылки на файлы.Итак, я сконструировал объекты File как можно скорее, а затем передал объекты File методам, например:

public void loadConfig(File configFile) {
    ...
}

Я оцениваю обширную замену File на URL.Это в первую очередь потому, что URL может легко ссылаться на файл в ZIP-файл или JAR-файл.

Есть ли у URL проблемы SecurityManager (при обращении к локальному файлу), которые класс File не имел бы для того же файла?

Поскольку этот рефакторинг влияет на интерфейсы, а не только на реализации, я также заинтересован в любом другом рассмотрении этой "замены".

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Основные проблемы, с которыми вы, вероятно, столкнетесь:

  • При построении URL вы должны обработать MalformedURLException.Файловый конструктор не выдает это исключение.
  • Вы теряете много удобных файловых методов, таких как: существует ли файл;это файл или каталог;это читабельно;установить файл как читаемый или записываемыйПоскольку URL-адрес может не ссылаться на файл, он не обязательно применяется и недоступен в API-интерфейсе URL.
  • Способ доступа к URL-адресу изменяется.URL имеет openStream или openConnection методы;с File вы, вероятно, будете использовать поток на основе файлов (например, FileInputStream).
  • Если URL требует наличия сети, а не доступа к диску, любые предположения о задержке, которые вы могли сделать, могут больше не выполняться.

Класс URL выполняет некоторые проверки SecurityManager, но, учитывая, что это приложение для настольного компьютера, разве у вас нет контроля над настройками менеджера безопасности?

Кроме этого, поскольку URLрасширенный набор файлов (поскольку он обрабатывает протокол file: среди прочего), вы должны иметь возможность использовать его таким же образом.Другой вариант - вместо передачи либо файла, либо URL-адреса - использовать потоки везде, где это возможно, так как вы можете использовать файл или URL-адрес для создания потока, как требуется.

1 голос
/ 20 января 2012

Есть ли у URL проблемы SecurityManager (при обращении к локальному файлу), которые класс File не имел бы для того же файла?

номер

Приложение в песочнице. имеет доступ только к URL-адресам по своему собственному пути к классам, но все, что может создать и использовать File, работает с полными разрешениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...