如何通过 bufferedInputStream 和 bufferedOutputStream 复制 JAVA 中的文件?
How to copy files in JAVA by bufferedInputStream and bufferedOutputStream?
我想使用 bufferedInputStream
和 bufferedOutputStream
将大型二进制文件从源文件复制到目标文件。
这是我的代码:
byte[] buffer = new byte[1000];
try {
FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(args[1]);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int numBytes;
while ((numBytes = bis.read(buffer))!= -1)
{
bos.write(buffer);
}
//bos.flush();
//bos.write("\u001a");
System.out.println(args[0]+ " is successfully copied to "+args[1]);
bis.close();
bos.close();
} catch (IOException e)
{
e.printStackTrace();
}
我可以成功复制,但后来我使用
cmp src dest
在命令行中比较两个文件。
错误信息
cmp: EOF on files
出现。我可以知道我哪里错了吗?
如果您正在使用 Java 8 尝试 Files.copy(Path source, Path target)
方法。
这是错误的:
bos.write(buffer);
您正在写出 整个 缓冲区,即使您只将数据读入其中的 部分 也是如此。你应该使用:
bos.write(buffer, 0, numBytes);
如果您使用 Java 7 或更高版本,我还建议使用 try-with-resources,否则将 close
调用放在 finally
块中。
正如 Steffen 所说,Files.copy
是一种更简单的方法(如果您可以的话)。
您需要关闭 FileOutputStream
和 FileInputStream
也可以使用FileChannel复制如下
FileChannel from = new FileInputStream(sourceFile).getChannel();
FileChanngel to = new FileOutputStream(destFile).getChannel();
to.transferFrom(from, 0, from.size());
from.close();
to.close();
您可以使用来自 apache-commons 库的IOUtils
我认为 copyLarge 功能是您需要的
我想使用 bufferedInputStream
和 bufferedOutputStream
将大型二进制文件从源文件复制到目标文件。
这是我的代码:
byte[] buffer = new byte[1000];
try {
FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(args[1]);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int numBytes;
while ((numBytes = bis.read(buffer))!= -1)
{
bos.write(buffer);
}
//bos.flush();
//bos.write("\u001a");
System.out.println(args[0]+ " is successfully copied to "+args[1]);
bis.close();
bos.close();
} catch (IOException e)
{
e.printStackTrace();
}
我可以成功复制,但后来我使用
cmp src dest
在命令行中比较两个文件。 错误信息
cmp: EOF on files
出现。我可以知道我哪里错了吗?
如果您正在使用 Java 8 尝试 Files.copy(Path source, Path target)
方法。
这是错误的:
bos.write(buffer);
您正在写出 整个 缓冲区,即使您只将数据读入其中的 部分 也是如此。你应该使用:
bos.write(buffer, 0, numBytes);
如果您使用 Java 7 或更高版本,我还建议使用 try-with-resources,否则将 close
调用放在 finally
块中。
正如 Steffen 所说,Files.copy
是一种更简单的方法(如果您可以的话)。
您需要关闭 FileOutputStream
和 FileInputStream
也可以使用FileChannel复制如下
FileChannel from = new FileInputStream(sourceFile).getChannel();
FileChanngel to = new FileOutputStream(destFile).getChannel();
to.transferFrom(from, 0, from.size());
from.close();
to.close();
您可以使用来自 apache-commons 库的IOUtils
我认为 copyLarge 功能是您需要的