从各种片段构建文件。
    从控制台读取文件名。
    每个文件具有名称:.partN
    例如,Lion.avi.part1、Lion.avi.part2、 …、Lion.avi.part37
    以随机顺序提供文件名。“结束”一词用于停止读取文件名。
    在所有文件所在的文件夹中,创建不带“part”后缀的文件,即,没有“.”。
    例如,Lion.avi.
    使用缓冲区将部分文件中的所有字节读取到所创建的文件中。
    以正确的顺序复制第一个,第一次复制第一个 part,然后第二个 part …,最后,最后一个 part。
    关闭流。
    Requirements:

      1. 程序必须从控制台读取文件名,直到输入“结束”一词为止。
      1. 创建一个流,将不带“part”后缀(“.”)的文件写入含所有“part”文件的文件夹中。
      1. 将所有字节从 *.partN 文件复制到新文件。
      1. 应使用缓冲区来读取和写入。
      1. 必须关闭文件流。
      1. 不使用 static 变量。
    1. package zh.codegym.task.task18.task1825;
    2. import java.io.*;
    3. import java.util.*;
    4. /*
    5. 构建文件
    6. */
    7. public class Solution {
    8. public static void main(String[] args) throws IOException {
    9. //注意这个构造方法
    10. Set<String> set = new TreeSet<>(new Comparator<String>() {
    11. @Override
    12. public int compare(String o1, String o2) {
    13. String[] part1 = o1.split(".part");
    14. String[] part2 = o2.split(".part");
    15. int num1 = Integer.parseInt(part1[part1.length-1]);
    16. int num2 = Integer.parseInt(part2[part2.length-1]);
    17. return num1 - num2;
    18. }
    19. });
    20. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    21. String fileName;
    22. String output = null;
    23. while (!(fileName = bufferedReader.readLine()).equals("结束"))
    24. {
    25. set.add(fileName);
    26. if (output == null) {
    27. int i = fileName.lastIndexOf(".part");
    28. output = fileName.substring(0, i);
    29. }
    30. }
    31. if (output == null) {
    32. return;
    33. }
    34. try (FileOutputStream fileOutputStream = new FileOutputStream(output)) {
    35. for (String s : set) {
    36. try (FileInputStream fileInputStream = new FileInputStream(s)) {
    37. byte[] bytes = new byte[fileInputStream.available()];
    38. fileInputStream.read(bytes);
    39. fileOutputStream.write(bytes);
    40. }
    41. }
    42. }
    43. }
    44. }