java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
我們經常會遇到讀取文件內容的情況,就需要判斷文件是否為文本文件,及文件編碼格式,防止無法讀取內容或亂碼出現情況。
根據文件擴展名判定不太準確,可能會遇到未知擴展名或被修改了擴展名,下面的測試類使用文件頭來判斷,兩個方法是:
1、判斷文件是否為文本格式的文件 - isText
2、獲取文件的編碼格式 - getFilecharset
我們可以看看下面實例代碼,并可以點擊最下面的閱讀原文在線測試一下哦。
1、判斷文件是否為文本文件
/**
* 判斷文件是否為文本格式的文件
*/
private static boolean isText(File file) {
boolean isText = true;
try {
FileInputStream fin = new FileInputStream(file);
long len = file.length();
for (int j = 0; j < (int) len; j++) {
int t = fin.read();
if (t < 32 && t != 9 && t != 10 && t != 13) {
isText = false;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return isText;
}
2、獲取文件編碼格式
/**
* 獲取文件的編碼格式
*/
private static String getFileCharset(File sourceFile) {
String charset = "GBK";
byte[] first3Bytes = new byte[3];
try {
boolean checked = false;
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1) {
return charset; // 文件編碼為 ANSI
} else if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "UTF-16LE"; // 文件編碼為 Unicode
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF) {
charset = "UTF-16BE"; // 文件編碼為 Unicode big endian
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB
&& first3Bytes[2] == (byte) 0xBF) {
charset = "UTF-8"; // 文件編碼為 UTF-8
checked = true;
}
bis.reset();
if (!checked) {
int loc = 0;
while ((read = bis.read()) != -1) {
loc++;
if (read >= 0xF0)
break;
if (0x80 <= read && read <= 0xBF) // 單獨出現BF以下的,也算是GBK
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) // 雙字節 (0xC0 - 0xDF)
// (0x80
// - 0xBF),也可能在GB編碼內
continue;
else
break;
} else if (0xE0 <= read && read <= 0xEF) {// 也有可能出錯,但是幾率較小
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
}
}
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
return charset;
}
--
知識分享,時代前行!
~~ 時代Java
還有更多好實例……
總結
以上是生活随笔為你收集整理的java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 的xml_详解Java解析XM
- 下一篇: java 断点续传组件_chunkupl