gpt4 book ai didi

java - 如何识别和写入具有 .xls 扩展名且内容为 .xlsx 的 Excel 文件

转载 作者:行者123 更新时间:2023-11-30 02:08:16 25 4
gpt4 key购买 nike

我正在将内容从一个 DMS(Filenet)迁移到另一个(Webcenter Content),在此过程中,我在 Filenet 中遇到了一个扩展名为 .xls 的 excel 文件(内容类型为 application/vnd.ms-excel)。

我获取了文件的 InputStream 并将其写入(文件 IO 操作)到临时位置,然后再将其推送到 Webcenter Content。

问题是当我下载并打开 Excel 文件 F1.xls 的 Filenet 版本时,它提示我文件格式和扩展名不匹配,但仍然打开文件并显示内容。

但是我推送到 Webcenter Content (WCC.xls) 的版本的行为方式不同。

它会提示相同的消息,但忽略提示后,它会显示垃圾字符,如果我将 WCC.xls 的扩展名更改为 WCC.xlsx,它的显示效果会很好。

我可以做什么来在运行时识别这些事情,任何帮助将不胜感激。

这是从我本地截取的代码

        InputStream initialStream;
try {
initialStream = new FileInputStream(
new File("C:\\Users\\xxxxxx\\Desktop\\Utils\\YYYYY\\FN1.xls"));

FileOutputStream oStream = null;

oStream = new FileOutputStream("C:\\Users\\xxxxxx\\Desktop\\Utils\\YYYYY\\WCC1.xls");
FilenetConnectionUtil fCU = new FilenetConnectionUtil();
fCU. writeFileToTempLocation("xx","xx",initialStream,oStream);
oStream.flush();
oStream.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

/* Write Method*/
public void writeFileToTempLocation(String filename, String filepath, InputStream inStream,FileOutputStream oStream) throws IOException {

// FileOutputStream oStream = new FileOutputStream(filepath);
byte[] buffer = new byte[1024];
int n;
if(inStream != null) {
while ((n = inStream.read(buffer)) != -1) {
oStream.write(buffer);
}
}

oStream.flush();

}

谢谢,拉胡尔·邓帕拉

最佳答案

由于 .xlsx 是一种 zip 格式,因此前两个字节(魔法 cookie)应为“PKp>

Path path = Paths.get(
"C:\\Users\\xxxxxx\\Desktop\\Utils\\YYYYY\\FN1.xls"));
// Or: Path path = file.toPath();

boolean isXlsx(Path path) {
try (InputStream in = Files.newInputStream(path)) {
byte[] magicCookie = new byte[2];
return in.read(magicCookie) == 2
&& magicCookie[0] == 'P'
&& magicCookie[1] == 'K';
} catch (IOException) {
return false;
}
}

关于java - 如何识别和写入具有 .xls 扩展名且内容为 .xlsx 的 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50874201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com