为了账号安全,请及时绑定邮箱和手机立即绑定

使用Java将内容从一个文件复制到多个文件

使用Java将内容从一个文件复制到多个文件

慕尼黑的夜晚无繁华 2021-04-06 13:13:00
FileInputStream Fread = new FileInputStream("somefilename"); FileOutputStream Fwrite = null;for (int i = 1; i <= 5; i++){    String fileName = "file" + i + ".txt";    Fwrite = new FileOutputStream(fileName);    int c;     while ((c = Fread.read()) != -1)     {        Fwrite.write((char) c);    }    Fwrite.close();}Fread.close();上面的代码仅写入一个文件。如何使一个文件的内容写入多个文件?
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

添加此行:

Fread.reset();

后 Fwrite.close();

并将第一行代码更改为此:

InputStream Fread = new BufferedInputStream(new FileInputStream("somefilename"));
Fread.mark(0);


查看完整回答
反对 回复 2021-04-21
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

仅供参考:请注意,read()您使用的方法返回abyte而不是a char,因此调用write((char) c)本来应该是just write(c)。


要在复制文件时并行写入多个文件,请为目标文件创建一个输出流数组,然后迭代该数组以将数据写入所有这些文件。


为了获得更好的性能,您应该始终使用缓冲区来执行此操作。一次写入一个字节效果不佳。


public static void copyToMultipleFiles(String inFile, String... outFiles) throws IOException {

    OutputStream[] outStreams = new OutputStream[outFiles.length];

    try {

        for (int i = 0; i < outFiles.length; i++)

            outStreams[i] = new FileOutputStream(outFiles[i]);

        try (InputStream inStream = new FileInputStream(inFile)) {

            byte[] buf = new byte[16384];

            for (int len; (len = inStream.read(buf)) > 0; )

                for (OutputStream outStream : outStreams)

                    outStream.write(buf, 0, len);

        }

    } finally {

        for (OutputStream outStream : outStreams)

            if (outStream != null)

                outStream.close();

    }

}


查看完整回答
反对 回复 2021-04-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

FRead流取得到最后一次,再没有什么让它从头开始。要解决此问题,您可以:

  • FRead.reset()每次写入文件后调用

  • FRead值缓存在某个位置并FWrite从此源写入

  • 创建一个数组/的集合,FileOutputStream并在迭代过程中将每个字节写入所有字节

推荐的解决方案当然是第一个。

您的代码中也存在一些问题:

  • 强烈建议您对流使用try-with-resouce,因为应安全关闭它们

  • 您似乎不遵循命名约定,即在lowerCamelCase中命名变量


查看完整回答
反对 回复 2021-04-21
  • 3 回答
  • 0 关注
  • 358 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信