在java中复制一个文本文件

时间:2014-08-20 08:28:49

标签: java inputstream outputstream

这是一个复制文本文件的代码我对此有一些疑问:

 public class CopyFile {

    public static void main(String[] args) {
        File f1 = new File("loremipsum.txt");
        File f2 = new File("target.txt");

        InputStream in = new FileInputStream(f1);
        OutputStream out = new FileOutputStream(f2);

        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
    }
}

我知道它还没有完成,我在这一部分有一个问题:

    while ((len = in.read(buf))> 0){
        out.write(buf,0,len);

    }

我想知道这一部分,首先(len = in.read(buf))> 0执行并读取数组的所有字节,然后将它的长度存储在len变量中,
或者读取第一个字节buf [0]并在len变量中存储1,因为它> 0,然后执行代码out.write(buf,0,len);的这一部分再次(len = in.read(buf))> 0 和......

2 个答案:

答案 0 :(得分:1)

来自文档read(byte[] b)

从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。

如果b的长度为零,则不读取任何字节,返回0;否则,尝试读取至少一个字节。如果没有字节可用,因为流位于文件的末尾,则返回值-1;否则,至少读取一个字节并存储到b。

读取的第一个字节存储在元素b [0]中,下一个存储在b [1]中,依此类推。读取的字节数最多等于b的长度。令k为实际读取的字节数;这些字节将存储在元素b [0]到b [k-1]中,使元素b [k]到b [b.length-1]不受影响。

返回:

读入缓冲区的总字节数,如果由于已到达流末尾而没有更多数据,则为-1。

答案 1 :(得分:0)

(len = in.read(buf))> 0

有三件事:

  1. in读取并将结果存储在buf
  2. len
  3. 存储阅读内容的长度
  4. 将阅读长度与0进行比较,以确定in是否已返回内容或已完成阅读。