[Java] テキストファイルかどうかを判別する
Javaで読み込むファイルがテキストファイルかどうかをチェックします。
テキストファイルであるかどうかを厳密に判定しようとすると、すべてのコードが想定した文字コードになっているかをチェックする必要があるかと思いますが、
この例では、コードをチェックして、00のコードがあればテキストファイルではないという判定をしています。
(文字コードに00はないので。)
たいていのバイナリファイルは、00のコードが含まれるため、ほぼこれでチェック可能です。
わざと00をつけないデータを作ったり、まれにそのようなデータがあれば、この判定は間違いを返してしまいます。
念のための確認というレベルであれば、これで問題ないと思います。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
File dir = new File("C:/Windows");
File[] files = dir.listFiles();
for (File f : files) {
if (f.isFile()) {
System.out.println(f.getName() + "=" + isTextFile(f.getAbsolutePath()));
}
}
}
/**
* テキストファイルかどうかを判定する
*
* @param filePath テキストファイル
* @return trueならテキストファイル falseならバイナリファイル
*/
public static boolean isTextFile(String filePath) {
FileInputStream in = null;
try {
in = new FileInputStream(filePath);
byte[] b = new byte[1];
while (in.read(b, 0, 1) > 0) {
if (b[0] == 0) {
return false;
}
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
in = null;
}
}
}
}
例外処理がいまいちです。
== ランキングに参加しています。ぜひクリックお願いします ==
[Oracle] Oracleに設定されているNLS_LANGの値をSQLで調べる [Java] ファイルを読んでバイト配列に入れる