无法使用 FileInputStream 复制 PDF 文件
Unable to copy PDF file using FileInputStream
我正在尝试将 PDF 文件从一个位置复制到另一个位置,但是一旦我 运行 以下代码,我就无法打开 PDF(它显示以下错误。)
There was an error opening this document. The file is damaged and
could not be repaired
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);
}
}
}
谁能帮我看看我到底做错了什么?
这里的问题是您没有关闭输入/输出流。这是资源泄漏,我在 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. You can copy a file directly with Files.copy
。
Files.copy(Paths.get(INPUT_FILE), Paths.get(OUTPUT_FILE));
它还可以采用第三个参数 CopyOption
. An example could be StandardCopyOption.REPLACE_EXISTING
替换目标文件(如果它已经存在)。
我正在尝试将 PDF 文件从一个位置复制到另一个位置,但是一旦我 运行 以下代码,我就无法打开 PDF(它显示以下错误。)
There was an error opening this document. The file is damaged and could not be repaired
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);
}
}
}
谁能帮我看看我到底做错了什么?
这里的问题是您没有关闭输入/输出流。这是资源泄漏,我在 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. You can copy a file directly with Files.copy
。
Files.copy(Paths.get(INPUT_FILE), Paths.get(OUTPUT_FILE));
它还可以采用第三个参数 CopyOption
. An example could be StandardCopyOption.REPLACE_EXISTING
替换目标文件(如果它已经存在)。