gpt4 book ai didi

java - 如何使用java复制包含图像和文本的文件

转载 作者:行者123 更新时间:2023-11-30 07:56:19 24 4
gpt4 key购买 nike

我有一些 Word 文档和 Excel 工作表,其中包含一些图像以及文件文本内容。我想创建该文件的副本并将其保存在特定位置。我尝试了以下方法,在指定位置创建文件,但文件已损坏且无法读取。

InputStream document = Thread.currentThread().getContextClassLoader().getResourceAsStream("upgradeworkbench/Resources/Upgrade_TD_Template.docx");
try {
OutputStream outStream = null;
Stage stage = new Stage();
stage.setTitle("Save");
byte[] buffer= new byte[document.available()];
document.read(buffer);
FileChooser fileChooser = new FileChooser();
fileChooser.setInitialFileName(initialFileName);
if (flag) {
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Microsoft Excel Worksheet", "*.xls"));
} else {
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Microsoft Word Document", "*.docx"));
}
fileChooser.setTitle("Save File");
File file = fileChooser.showSaveDialog(stage);
if (file != null) {
outStream = new FileOutputStream(file);
outStream.write(buffer);
// IOUtils.copy(document, outStream);
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}

任何人都可以建议我任何不同的方法来获取正确的文件。

PS:我正在使用 InputStream 读取文件,因为它位于项目 jar 内。

PPS:我也尝试过 Files.copy() 但没有成功。

最佳答案

我建议您永远不要相信InputStream.available知道输入的实际大小,因为它只是返回准备从立即读取的字节数缓冲。它可能返回一个小数字,但并不意味着文件很小,而是缓冲区暂时半满。

完全读取输入流并将其写入输出流的正确算法是:

int n;
byte[] buffer=new byte[4096];
do
{
n=input.read(buffer);
if (n>0)
{
output.write(buffer, 0, n);
}
}
while (n>=0);

关于java - 如何使用java复制包含图像和文本的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627565/

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