从各种片段构建文件。
从控制台读取文件名。
每个文件具有名称:
例如,Lion.avi.part1、Lion.avi.part2、 …、Lion.avi.part37。
以随机顺序提供文件名。“结束”一词用于停止读取文件名。
在所有文件所在的文件夹中,创建不带“part”后缀的文件,即,没有“.
例如,Lion.avi.
使用缓冲区将部分文件中的所有字节读取到所创建的文件中。
以正确的顺序复制第一个,第一次复制第一个 part,然后第二个 part …,最后,最后一个 part。
关闭流。
Requirements:
- 程序必须从控制台读取文件名,直到输入“结束”一词为止。
- 创建一个流,将不带“part”后缀(“.
”)的文件写入含所有“part”文件的文件夹中。
- 创建一个流,将不带“part”后缀(“.
- 将所有字节从 *.partN 文件复制到新文件。
- 应使用缓冲区来读取和写入。
- 必须关闭文件流。
- 不使用 static 变量。
package zh.codegym.task.task18.task1825;
import java.io.*;
import java.util.*;
/*
构建文件
*/
public class Solution {
public static void main(String[] args) throws IOException {
//注意这个构造方法
Set<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String[] part1 = o1.split(".part");
String[] part2 = o2.split(".part");
int num1 = Integer.parseInt(part1[part1.length-1]);
int num2 = Integer.parseInt(part2[part2.length-1]);
return num1 - num2;
}
});
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName;
String output = null;
while (!(fileName = bufferedReader.readLine()).equals("结束"))
{
set.add(fileName);
if (output == null) {
int i = fileName.lastIndexOf(".part");
output = fileName.substring(0, i);
}
}
if (output == null) {
return;
}
try (FileOutputStream fileOutputStream = new FileOutputStream(output)) {
for (String s : set) {
try (FileInputStream fileInputStream = new FileInputStream(s)) {
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
fileOutputStream.write(bytes);
}
}
}
}
}