Как определить расширение файла по типу контента

 
 
 
Сообщения:4
Подскажите, пожалуйста, как можно определить расширение файла по типу контента.
Например, имеется какой-нибудь массив байтов - содержимое какого-нить файла (видео, аудио, изображение, текст и т.д.). Его надо выгрузить в файл. Для этого надо бы расширение соответствующее подобрать... Как это можно сделать?

Заранее, огромное спасибо!
 
 
Сообщения:389
Обычно тип данных известен.

Наример, данные, загружаемые с Web сервера, сопровождаются информацией о их типе (content type / mime type). Используя эту информацию, можно сделать вывод о расширении конечного файла.

Посмотрите здесь:
http://java.sun.com/javase/6/docs/api/javax/activation/URLDataSource.html
 
 
Сообщения:4
Спасибо большое! Я уже сделала
 
 
Сообщения:3874
Виктория:
Спасибо большое! Я уже сделала


А как? Дайте пример. Другие тоже смогут сделать :)
 
 
Сообщения:4
Можно так:
		sun.net.www.MimeTable t = sun.net.www.MimeTable.getDefaultTable();
		MimeEntry e = t.find("text/plain");
		System.out.println(e.getExtensionsAsList());

Результат:
.text,.c,.cc,.c++,.h,.pl,.txt,.java,.el


sun.net.www.MimeTable по умолчанию использует данные из файла .../jre/lib/content-types.properties. Но, во-первых, этот файл не обновлялся, кажется, с версии java 1.2, и там не все MIME-типы определены (хотя можно вручную все добавить). А во-вторых, такой метод дает несколько расширений, а мне надо было одно. Поэтому делала вручную:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
import java.util.Properties;

public class ExtensionDefiner {

	static private Map properties = null;

	public static void init() {
		FileInputStream in = null;
		try {
			URL url = ClassLoader.getSystemClassLoader().getResource(
					"mimetypes.properties");
			if (url != null)
				in = new FileInputStream(url.getFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (in == null)
			try {
				in = new FileInputStream("mimetypes.properties");
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}

		if (in != null) {
			try {
				Properties props = new Properties();
				props.load(in);
				in.close();
				properties = props;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static String getExtensionFromMimeType(String mimeType) {
		if (properties == null)
			return null;
		
		return (String) properties.get(mimeType);
	}
	
//	public static void main(String[] args) throws Exception {
//		ExtensionDefiner.init();
//		System.out.println(ExtensionDefiner.getExtensionFromMimeType("audio/x-wav"));
//	}

}

Фрагмент из файла "mimetypes.properties":
...
audio/x-pn-realaudio=.ra
image/bmp=.bmp
image/cis-cod=.cod
...


Ну все. Ничего особенного :)
 
 
Сообщения:3874
Спасибо большое! Отличный пример!
 
 
Сообщения:4
Да не за что! :))))
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет