Java判断word文件版本
业务中有调用一个office转换服务,转换服务是基于word转换的,但是有时候出现文件后缀名不匹配的情况时,word无法识别,就比如,这个文件实际上是word 2003文件,但是后缀名是docx,word就会打不开,从而转换失败
解决办法
转换之前判断文件头
/**
* 判断版本
*/
public int checkDocx(String filePath) {
//获取文件头判断版本
try (FileInputStream fileInputStream = new FileInputStream(filePath)) {
byte[] b = new byte[4];
fileInputStream.read(b, 0, b.length);
//Hutool的hexutil
String value = HexUtil.encodeHexStr(b);
logger.info("检测word文件头:" + value);
//2003版本的word
if ("d0cf11e0".equals(value)) {
return 2003;
} else {
return 2007;
}
} catch (Exception e) {
return -1;
}
}
完事之后重命名一下文件再丢到转换服务就好了
if (i == 2003 && "docx".equals(FileUtil.getExtensionName(file))) {
//重命名文件为doc
File file1 = new File(file);
File file2 = new File(cn.hutool.core.io.FileUtil.getParent(file1, 1) + File.separator + FileUtil.getFileNameNoEx(file1.getName()) + ".doc");
File targetFile = cn.hutool.core.io.FileUtil.copy(file1, file2, true);
}
Fileutil
/**
* 获取文件扩展名,不带 .
*/
public static String getExtensionName(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length() - 1))) {
return filename.substring(dot + 1);
}
}
return filename;
}
/**
* Java文件操作 获取不带扩展名的文件名
*/
public static String getFileNameNoEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length()))) {
return filename.substring(0, dot);
}
}
return filename;
}
分别是哔哩哔哩序号35,小米运动序号2,米友社序号13,这个是同一个账号下运行的任务