Word, Excel, PowerPointから文字列取得

POI を使うと、Wordからとか、簡単に文字列を取得することができる。

InputStream in = ...;
String content;
content = new org.apache.poi.hwpf.extractor.WordExtractor(in).getText();
content = new org.apache.poi.hssf.extractor.ExcelExtractor(new HSSFWorkbook(in)).getText();
content = new org.apache.poi.hslf.extractor.PowerPointExtractor(in).getText();

Maven2 でこれしたいなら、以下を pom.xml に書く。

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.5-beta6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.5-beta6</version>
</dependency>

一応、文字化けもしないみたい。

JAFでMIMEタイプ取得

JavaBeans Activation Framework を使えば、以下みたいな感じで MIME タイプを取得できる。

String filename = "hoge.txt";
String mimeType = new MimetypesFileTypeMap().getContentType(filename);

これをするためには、Maven2 を使っているなら、pom.xml に

:
<repositories>
<repository>
<id>java.net</id>
<url>http://download.java.net/maven/1</url>
<layout>legacy</layout>
</repository>
</repositories>
:
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
:

を書けば良い。jaf もデフォルトで処理できる拡張子が少ないので、META-INF/mime.typesを作って

application/msword              doc dot wiz rtf
application/msexcel             xls
application/mspowerpoint        ppt
application/x-pdf               pdf

という感じで書いていけば拡張可能。という感じで、S2Robot 内で使ってみた。

Random

java.util.RandomでRandom()としたときのシードって、固定かと思っていたら違うのね。Java 1.4 まではSystem.currentTimeMillis() をしていたけど、Java 5 以降では seedUniquifier の値とSystem.nanoTime()の和でよりかぶらない値にしたのね。確認した感じだと、1.1 あたりから現在時間をシードにしてたみたいだな(1.0.2 とかのJavaDocが見つからないからそれは不明)。てっきり固定かと思ってた…。