趣文网 > 作文大全

Java 判断文件是否为文本格式 并获取文件编码格式 读取内容!

2020-12-02 04:30:02
相关推荐

我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况。

根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件头来判断,两个方法是:

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

还有更多好实例……

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

描写消防员的作文 关于坚持的作文800字 我喜欢什么作文三百字 拥抱青春放飞梦想作文 暑假有什么趣事作文 小猫动物的作文 五年级作文大全 写初三生活的作文 刺猬作文 英语作文常用的句子 借物喻人300字作文 手机的利与弊英语作文 告诉你一件新鲜事作文350字 以自信的姿态前行作文 小学作文点评 考研英语小作文类型 宜兴科技馆作文 外婆作文高中抒情 我的一天作文200 我心中的爸爸妈妈作文 描写操场的作文 写作文时数字占几格 商丘古城作文500字 珍惜身边的幸福作文 以快乐为话题的作文400字 玩木头人游戏作文 寻找半命题作文600字 我不后悔作文500字 初中生优秀作文选 关于追星的作文800字