【问题标题】:Unable to copy PDF file using FileInputStream无法使用 FileInputStream 复制 PDF 文件
【发布时间】:2016-07-31 12:03:02
【问题描述】:

我正在尝试将 PDF 文件从 1 个位置复制到另一个位置,但运行以下代码后,我无法打开 PDF(它显示以下错误。)

打开此文档时出错。文件已损坏并且 无法修复

public class BinaryFileTransfer {

    private static String INPUT_FILE = "C:\\Users\\sashwat\\Desktop\\a.pdf";
    private static String OUTPUT_FILE = "C:\\Users\\sashwat\\Desktop\\a-copy.pdf";

    public static void main(String args[]) throws Exception {
        InputStream is = new BufferedInputStream(new FileInputStream(INPUT_FILE));

        OutputStream wos = new BufferedOutputStream(new FileOutputStream(OUTPUT_FILE));

        int len = 0;
        byte[] brr = new byte[1000];
        while ((len = is.read(brr)) != -1) {
            wos.write(brr, 0, len);
        }
    }
}

谁能帮我看看我到底做错了什么?

【问题讨论】:

  • 复制完成后文件大小相同?

标签: java file pdf fileoutputstream bufferedoutputstream


【解决方案1】:

这里的问题是您没有关闭输入/输出流。这是资源泄漏,我在 Windows 机器上重现了您的问题。

从 Java 7 开始,您可以使用 try-with-resources 语句自动执行此操作:

public static void main(String[] args) throws IOException {
    try (InputStream is = new BufferedInputStream(new FileInputStream(INPUT_FILE));
        OutputStream wos = new BufferedOutputStream(new FileOutputStream(OUTPUT_FILE))) {
        int len = 0;
        byte[] brr = new byte[1000];
        while ((len = is.read(brr)) != -1) {
            wos.write(brr, 0, len);
        }
    }
}

在try部分结束时,每个打开的资源都会被关闭。

但是,我强烈建议您开始使用Java NIO.2 API。您可以直接使用Files.copy复制文件。

Files.copy(Paths.get(INPUT_FILE), Paths.get(OUTPUT_FILE));

它也可以接受第三个参数CopyOption。一个例子可以是StandardCopyOption.REPLACE_EXISTING,如果目标文件已经存在,它会替换它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多