2011-01-03 19 views
11

アップロードされているファイルのタイプを調べてください。 私はExcelとCSVを区別したいと思っていました。Javaのファイルタイプを確認してください

MIMETypeは、これらのファイルに対して同じものを返します。助けてください。

+2

多分、http://stackoverflow.com/questions/2729038/is-there-a-java-library-equivalent-to-file-command-in-unixの複製。少なくともあなたはそこにあなたの答えを見つけることができます –

答えて

9

こちらがお役に立てば幸いです。例としない鉱山から採取された:

import javax.activation.MimetypesFileTypeMap; 
import java.io.File; 

class GetMimeType { 
    public static void main(String args[]) { 
    File f = new File("test.gif"); 
    System.out.println("Mime Type of " + f.getName() + " is " + 
         new MimetypesFileTypeMap().getContentType(f)); 
    // expected output : 
    // "Mime Type of test.gif is image/gif" 
    } 

}

同じは、ExcelおよびCSVタイプについて真であってもよいです。未検証。

+0

逆コンパイルされたコードから、ファイル名の接尾辞(拡張子)だけを使うようです。それで十分ではありません。 – virgo47

1

CSVはテキストで始まり、Excelタイプはおそらくバイナリです。

しかし、最も簡単な方法は、POIを使用してExcelドキュメントを読み込もうとすることです。これが失敗した場合は、ファイルをCSVとしてロードしてください。失敗した場合は、どちらもタイプできません。

2

better wayjavax.activation.*を使用せず:

URLConnection.guessContentTypeFromName(f.getAbsolutePath())); 
16

Iは、MIMEタイプを検出するために、マジックバイトパターンとグロブヒント(ファイル拡張子)を使用して、ファイルタイプを識別するApache Tikaを使用します。また、ファイル内容の解析もサポートしています(実際には使用しません)。ここで

はティカは、ファイル上の任意の追加の解析を実行せずにファイルの種類を検出するために使用することができますどのように迅速かつ汚い例です。

import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.util.HashMap; 

import org.apache.tika.metadata.HttpHeaders; 
import org.apache.tika.metadata.Metadata; 
import org.apache.tika.metadata.TikaMetadataKeys; 
import org.apache.tika.mime.MediaType; 
import org.apache.tika.parser.AutoDetectParser; 
import org.apache.tika.parser.ParseContext; 
import org.apache.tika.parser.Parser; 
import org.xml.sax.helpers.DefaultHandler; 

public class Detector { 

    public static void main(String[] args) throws Exception { 
     File file = new File("/pats/to/file.xls"); 

     AutoDetectParser parser = new AutoDetectParser(); 
     parser.setParsers(new HashMap<MediaType, Parser>()); 

     Metadata metadata = new Metadata(); 
     metadata.add(TikaMetadataKeys.RESOURCE_NAME_KEY, file.getName()); 

     InputStream stream = new FileInputStream(file); 
     parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); 
     stream.close(); 

     String mimeType = metadata.get(HttpHeaders.CONTENT_TYPE); 
     System.out.println(mimeType); 
    } 

} 
2

すでに春を使用している場合、これは、CSVやExcelのために働きます:

またはmime.typesファイルを更新することができます。または - -

4

私はjava.nio.file.Files

public String getContentType(File file) throws IOException { 
     return Files.probeContentType(file.toPath()); 
} 

でこれを行うための安価な方法を考え出したのに役立ちます

public String getContentType(Path filePath) throws IOException { 
     return Files.probeContentType(filePath); 
} 

希望。

乾杯。

+2

OSに依存するので注意してください!私のMacは、CSSファイルのMIMEタイプを検出することさえできませんでした。 –

関連する問題