使用 FileStream 在 Java 中复制文件
copy file in Java using FileStream
我想使用 FileStream 在 Java 中复制一个文件。
这是我的代码。
FileInputStream infile = new FileInputStream("in");
FileOutputStream outfile = new FileOutputStream("out");
byte[] b = new byte[1024];
while(infile.read(b, 0, 1024) > 0){
outfile.write(b);
}
infile.close();
outfile.close();
我使用 vim 查看我的文件。
输入文件 "in"
Hello World1
Hello World2
Hello World3
输出文件"output"
Hello World1
Hello World2
Hello World3
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@...
输出文件中有很多额外的'^@'。
输入文件的大小为 39 字节。
输出文件的大小为 1KB。
为什么输出文件中有很多额外的字符?
当您调用 infile.read
时,return 值告诉您要取回多少项目。当您调用 outfile.write
时,您告诉它缓冲区已满,因为您没有存储从 read
调用返回的字节数。
要解决此问题,请存储字节数,然后将正确的数字传递给 write
:
byte[] b = new byte[1024];
int len;
while((len = infile.read(b, 0, 1024)) > 0){
outfile.write(b, 0, len);
}
您正在尝试将 1024
字节从一个文件复制到另一个文件。那不会很好地工作。尝试按文件大小读取。
FileInputStream infile = new FileInputStream("in");
FileOutputStream outfile = new FileOutputStream("out");
byte[] b = new byte[infile.getChannel().size()];
while(infile.read(b, 0, infile.getChannel().size()) > 0){
outfile.write(b);
}
infile.close();
outfile.close();
数组b[]的大小为1KB。附加的额外字符“@”表明该文件仍有未使用的 space。从技术上讲,您是在字节数组中复制文件,然后在输出文件中写入 but 数组。这就是为什么会出现这个问题。
复制文件最简单的方法是调用单一方法
1. 在 Java 7 之前 - 来自 Google Guava 图书馆
com.google.common.io.Files#copy(文件来自,
归档至)
2. 在 Java 7 & 8
java.nio.file.Files#copy(Path source, Path target, CopyOption... options)
我想使用 FileStream 在 Java 中复制一个文件。 这是我的代码。
FileInputStream infile = new FileInputStream("in");
FileOutputStream outfile = new FileOutputStream("out");
byte[] b = new byte[1024];
while(infile.read(b, 0, 1024) > 0){
outfile.write(b);
}
infile.close();
outfile.close();
我使用 vim 查看我的文件。
输入文件 "in"
Hello World1
Hello World2
Hello World3
输出文件"output"
Hello World1
Hello World2
Hello World3
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@...
输出文件中有很多额外的'^@'。
输入文件的大小为 39 字节。
输出文件的大小为 1KB。
为什么输出文件中有很多额外的字符?
当您调用 infile.read
时,return 值告诉您要取回多少项目。当您调用 outfile.write
时,您告诉它缓冲区已满,因为您没有存储从 read
调用返回的字节数。
要解决此问题,请存储字节数,然后将正确的数字传递给 write
:
byte[] b = new byte[1024];
int len;
while((len = infile.read(b, 0, 1024)) > 0){
outfile.write(b, 0, len);
}
您正在尝试将 1024
字节从一个文件复制到另一个文件。那不会很好地工作。尝试按文件大小读取。
FileInputStream infile = new FileInputStream("in");
FileOutputStream outfile = new FileOutputStream("out");
byte[] b = new byte[infile.getChannel().size()];
while(infile.read(b, 0, infile.getChannel().size()) > 0){
outfile.write(b);
}
infile.close();
outfile.close();
数组b[]的大小为1KB。附加的额外字符“@”表明该文件仍有未使用的 space。从技术上讲,您是在字节数组中复制文件,然后在输出文件中写入 but 数组。这就是为什么会出现这个问题。
复制文件最简单的方法是调用单一方法
1. 在 Java 7 之前 - 来自 Google Guava 图书馆
com.google.common.io.Files#copy(文件来自,
归档至)
2. 在 Java 7 & 8
java.nio.file.Files#copy(Path source, Path target, CopyOption... options)