【问题标题】:copy a text file in java在java中复制文本文件
【发布时间】:2014-08-20 08:28:49
【问题描述】:

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

 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] 并将 1 存储在 len 变量中,因为它>0,所以这部分代码 out.write(buf,0,len); 执行并再次 (len = in.read(buf))> 0 还有……。

【问题讨论】:

    标签: java inputstream outputstream


    【解决方案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。

    【讨论】:

      【解决方案2】:
      (len = in.read(buf))> 0
      

      做三件事:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-21
        • 2012-10-23
        • 2020-02-03
        • 1970-01-01
        • 2011-01-25
        • 2014-10-04
        • 1970-01-01
        • 2013-04-26
        相关资源
        最近更新 更多