Получение типа пантомимы файла в Java

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

328
задан NoobEditor 26 August 2014 в 19:53
поделиться

3 ответа

Если Вы работаете с Сервлетом и если контекст сервлета доступен Вам, можно использовать:

getServletContext().getMimeType( fileName );
0
ответ дан 23 November 2019 в 00:48
поделиться

К сожалению,

mimeType = file.toURL().openConnection().getContentType();

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

Однако у вас есть это:

mimeType= URLConnection.guessContentTypeFromName(file.getName());

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

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
 //...close stream

. Однако, как указано в комментарии выше, встроенная таблица mime-типов весьма ограничена, не включая, например, MSWord и PDF. Итак, если вы хотите обобщить, вам нужно выйти за рамки встроенных библиотек, используя, например, Mime-Util (отличная библиотека, использующая как расширение файла, так и содержимое).

207
ответ дан 23 November 2019 в 00:48
поделиться

JAF API является частью JDK 6. Посмотрите на пакет javax.activation .

Наиболее интересными классами являются javax.activation.MimeType - фактический держатель типа MIME - и javax.activation.MimetypesFileTypeMap - класс, экземпляр которого может преобразовывать тип MIME как строку для файла:

String fileName = "/path/to/file";
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();

// only by file name
String mimeType = mimeTypesMap.getContentType(fileName);

// or by actual File instance
File file = new File(fileName);
mimeType = mimeTypesMap.getContentType(file);
50
ответ дан 23 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: