Setting file type in java

Getting a File’s Mime Type in Java

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

We rely on other people’s code in our own work. Every day.

It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.

The problem is, of course, when things fall apart in production — debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky.

Lightrun is a new kind of debugger.

It’s one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics.

Learn more in this quick, 5-minute Lightrun tutorial:

announcement - icon

Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.

The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.

Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.

Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:

announcement - icon

DbSchema is a super-flexible database designer, which can take you from designing the DB with your team all the way to safely deploying the schema.

The way it does all of that is by using a design model, a database-independent image of the schema, which can be shared in a team using GIT and compared or deployed on to any database.

And, of course, it can be heavily visual, allowing you to interact with the database using diagrams, visually compose queries, explore the data, generate random data, import data or build HTML5 database reports.

Читайте также:  Python variable is tuple

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

We’re looking for a new Java technical editor to help review new articles for the site.

1. Overview

In this tutorial, we’ll take a look at various strategies for getting MIME types of a file. We’ll look at ways to extend the MIME types available to the strategies, wherever applicable.

We’ll also point out where we should favor one strategy over the other.

2. Using Java 7

Let’s start with Java 7 – which provides the method Files.probeContentType(path) for resolving the MIME type:

@Test public void whenUsingJava7_thenSuccess() < Path path = new File("product.png").toPath(); String mimeType = Files.probeContentType(path); assertEquals(mimeType, "image/png"); >

This method makes use of the installed FileTypeDetector implementations to probe the MIME type. It invokes the probeContentType of each implementation to resolve the type.

Now, if the file is recognized by any of the implementations, the content type is returned. However, if that doesn’t happen, a system-default file type detector is invoked.

However, the default implementations are OS specific and might fail depending on the OS that we are using.

In addition to that, it’s also important to note that the strategy will fail if the file isn’t present in the filesystem. Furthermore, if the file doesn’t have an extension, it will result in failure.

3. Using URLConnection

URLConnection provides several APIs for detecting MIME types of a file. Let’s briefly explore each of them.

3.1. Using getContentType()

We can use getContentType() method of URLConnection to retrieve a file’s MIME type:

@Test public void whenUsingGetContentType_thenSuccess()< File file = new File("product.png"); URLConnection connection = file.toURL().openConnection(); String mimeType = connection.getContentType(); assertEquals(mimeType, "image/png"); >

However, a major drawback of this approach is that it’s very slow.

3.2. Using guessContentTypeFromName()

Next, let’s see how we can make use of the guessContentTypeFromName() for the purpose:

@Test public void whenUsingGuessContentTypeFromName_thenSuccess()< File file = new File("product.png"); String mimeType = URLConnection.guessContentTypeFromName(file.getName()); assertEquals(mimeType, "image/png"); >

This method makes use of the internal FileNameMap to resolve the MIME type from the extension.

We also have the option of using guessContentTypeFromStream() instead, which uses the first few characters of the input stream, to determine the type.

3.3. Using getFileNameMap()

A faster way to obtain the MIME type using URLConnection is using the getFileNameMap() method:

@Test public void whenUsingGetFileNameMap_thenSuccess()< File file = new File("product.png"); FileNameMap fileNameMap = URLConnection.getFileNameMap(); String mimeType = fileNameMap.getContentTypeFor(file.getName()); assertEquals(mimeType, "image/png"); >

The method returns the table of MIME types used by all instances of URLConnection. This table is then used to resolve the input file type.

Читайте также:  Php strtotime date formats

The built-in table of MIME types is very limited when it comes to URLConnection.

By default, the class uses content-types.properties file in JRE_HOME/lib. We can, however, extend it, by specifying a user-specific table using the content.types.user.table property:

System.setProperty("content.types.user.table",""); 

4. Using MimeTypesFileTypeMap

MimeTypesFileTypeMap resolves MIME types by using file’s extension. This class came with Java 6, and hence comes very handy when we’re working with JDK 1.6.

Now let’s see how to use it:

@Test public void whenUsingMimeTypesFileTypeMap_thenSuccess() < File file = new File("product.png"); MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap(); String mimeType = fileTypeMap.getContentType(file.getName()); assertEquals(mimeType, "image/png"); >

Here, we can either pass the name of the file or the File instance itself as the parameter to the function. However, the function with File instance as the parameter internally calls the overloaded method that accepts the filename as the parameter.

Internally, this method looks up a file called mime.types for the type resolution. It’s very important to note that the method searches for the file in a specific order:

  1. Programmatically added entries to the MimetypesFileTypeMap instance
  2. .mime.types in the user’s home directory
  3. /lib/mime.types
  4. resources named META-INF/mime.types
  5. resource named META-INF/mimetypes.default (usually found only in the activation.jar file)

However, if no file is found, it will return application/octet-stream as the response.

5. Using jMimeMagic

jMimeMagic is a restrictively licensed library that we can use to obtain the MIME type of a file.

Let’s start by configuring the Maven dependency:

 net.sf.jmimemagic jmimemagic 0.1.5 

We can find the latest version of this library on Maven Central.

Next, we’ll explore how to work with the library:

@Test public void whenUsingJmimeMagic_thenSuccess() < File file = new File("product.png"); Magic magic = new Magic(); MagicMatch match = magic.getMagicMatch(file, false); assertEquals(match.getMimeType(), "image/png"); >

This library can work with a stream of data and hence doesn’t require the file to be present in the file system.

6. Using Apache Tika

Apache Tika is a toolset that detects and extracts metadata and text from a variety of files. It has a rich and powerful API and comes with tika-core which we can make use of, for detecting MIME type of a file.

Let’s begin by configuring the Maven dependency:

 org.apache.tika tika-core 1.18 

Next, we’ll make use of the detect() method to resolve the type:

@Test public void whenUsingTika_thenSuccess() < File file = new File("product.png"); Tika tika = new Tika(); String mimeType = tika.detect(file); assertEquals(mimeType, "image/png"); >

The library relies on magic markers in the stream prefix, for type resolution.

7. Conclusion

In this article, we’ve looked at the various strategies of obtaining the MIME type of a file. Furthermore, we have also analyzed the tradeoffs of the approaches. We have also pointed out the scenarios where we should favor one strategy over the other.

Читайте также:  Жирный текст с помощью CSS - "Нубекс"

The full source code that is used in this article is available over at GitHub, as always.

announcement - icon

Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.

The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.

Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.

Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:

Источник

Определение типов файлов в Java

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

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

О примерах

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

файл
название
файл
расширение
файл
Тип
Тип совпадений
Конвенция о продлении?
actualXml.xml XML XML да
blogPostPDF PDF нет
blogPost.pdf PDF PDF да
blogPost.gif GIF GIF да
blogPost.jpg JPG JPEG да
blogPost.png PNG PNG да
blogPostPDF.txt текст PDF нет
blogPostPDF.xml XML PDF нет
blogPostPNG.gif GIF PNG нет
blogPostPNG.jpg JPG PNG нет
dustin.txt текст Текст да
dustin.xml XML Текст нет
Дастин Текст нет

Files.probeContentType (Path) [JDK 7]

Java SE 7 представила высоко утилитарный класс Files, и Javadoc этого класса кратко описывает его использование: «Этот класс состоит исключительно из статических методов, которые работают с файлами, каталогами или другими типами файлов» и «в большинстве случаев с методами, определенными здесь делегирует соответствующему провайдеру файловой системы для выполнения файловых операций ».

Класс java.nio.file.Files предоставляет метод probeContentType (Path), который «проверяет тип содержимого файла» посредством использования «установленных реализаций FileTypeDetector» (Javadoc также отмечает, что «данный вызов виртуальной машины Java») ведет общесистемный список детекторов типов файлов »).

Источник

Оцените статью