Bootstrap

练习-Java输入输出之文件字节IO流之合并文件

第1关:练习-Java输入输出之文件字节IO流之合并文件


任务描述

本关任务:把给定的多个文件合并成一个文件。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,把给定的多个文件合并成一个文件。具体要求如下:

  • 接收给定的一行字符串(如:/test,a.txt。其中逗号前为一个目录,该目录下存储着子文件,逗号后为目标文件,用于存储各子文件合并的内容;
  • 把给定目录下的所有子文件的内容合并到目标文件中;
  • 输出目标文件大小,示例:“最后目标文件的大小:X字节”;
  • 给定子文件的命名规则:假如目标文件为 a.txt,则子文件为 a.txt-1、a.txt-2、…、a.txt-n。

注意:请按照子文件后缀数字按照从小到大依次合并到目标文件。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

例: 测试输入:

  1. /test/,a.txt

预期输出(第一行为编程要求中要求输出的提示语句,后面为后台使用 cat 命令查看目标文件产生的结果):

  1. 最后目标文件的大小:31字节
  2. 888hy67
  3. ddsljcnjf746
  4. howtodoit

注意:最后有一个空行。


开始你的任务吧,祝你成功

import java.io.*;
import java.util.Scanner;

public class FileTest {

    public static void main(String[] args) throws IOException {
        
        Scanner scanner = new Scanner(System.in);     // 获取给定字符串
        String s = scanner.nextLine();
        
        // 请在Begin-End间编写完整代码
        /********** Begin **********/
        
        // 切割给定字符串,得到子文件目录和目标文件名
        String[] strs= s.split(",");
        // 循环读取子文件内容,写入到目标文件
        File f1=new File(strs[0]);
        File dest = new File(strs[0]+strs[1]);

        FileOutputStream fos = new FileOutputStream(dest,true);

        File[] files = f1.listFiles();
        for(File file:files){
        FileInputStream fis = new FileInputStream(file);
        int len=0;
        byte[] by = new byte[1024];
        while((len=fis.read(by))!=-1)
            fos.write(by,0,len);
        fis.close();
        }
        // 输出目标文件大小
        System.out.println("最后目标文件的大小:"+dest.length()+"字节");

        fos.close();
        /********** End **********/
        BufferedReader re = new BufferedReader(new FileReader(strs[0]+strs[1]));
        String sss=null;
        while((sss=re.readLine())!=null)
        System.out.println(sss);
        re.close();
    }
}

;