我想将数据从demo1.txt
复制到demo2.txt
,虽然我可以BufferedReader
执行此操作,但我希望按BufferedInputStream
/ BufferedOutputStream
进行复制。请告诉我如何做到这一点。
import java.io.*;
class stream4
{
public static void main(String arr[])
{
BufferedInputStream bfis=new BufferedInputStream(new FileInputStream("demo1.txt"));
BufferedOutputSteam bfos=new BufferedOutputStream(new FileOutputStream("demo2.txt"));
byte b[]=(bfis.read());
bfos.write(b);
bfis.close();
bfos.close();
}
}
答案 0 :(得分:3)
变化
byte b[]=(bfis.read());
到
byte[] b = new byte[1024];
try {
for (int readNum; (readNum = bfis.read(b)) != -1;) {
bfos.write(b, 0, readNum);
}
} catch (IOException ex) {
ex.printStackTrace();
}
finally {
bfis.close();
bfos.close();
}
为bfis.read()
下一个数据字节,如果到达流末尾则为-1。
答案 1 :(得分:2)
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Main
{
public static void main(String[] args) throws Exception
{
String fromFileName = "demo1.txt";
String toFileName = "demo2.txt";
BufferedInputStream in = new BufferedInputStream(new FileInputStream(fromFileName));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(toFileName));
byte[] buff = new byte[32 * 1024];
int len = 0;
while ((len = in.read(buff)) > 0) //If necessary readLine()
out.write(buff, 0, len);
in.close();
out.close();
}
}
这将完成工作:)。只需指定您正在查看的字节大小,然后使用循环继续读取文件。
答案 2 :(得分:0)
正如其他人正确建议的那样,您实际上需要自己的缓冲区来按部分读取和写入,这表示为指定大小的字节数组。因此,现在用BufferedInputStream和BufferedOutputStream包装FileInputStream和FileOutputStream是没有意义的-如果您从流中输入并按较小的部分输出,它们将非常有用。我建议仅使缓冲区大于建议值(例如16384或32768),并在这种情况下删除不必要的BufferedInputStream和BufferedOutputStream。