package com.javarush.test.level18.lesson10.home10;
/* Собираем файл
Собираем файл из кусочков
Считывать с консоли имена файлов
Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end"
В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN]. Например, Lion.avi
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю.
Закрыть потоки. Не использовать try-with-resources
*/
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> list = new ArrayList<>();
while(true) {
String s = reader.readLine();
if (s.equals("end")) break;
else list.add(s);
}
String outputFileName;
StringTokenizer st = new StringTokenizer(list.get(0), ".");
String[] nameParts = new String[st.countTokens()];
int count = 0;
boolean b = false;
while (st.hasMoreTokens()) {
nameParts[count] = (st.nextToken());
count++;
}
outputFileName = nameParts[0] + "." + nameParts[nameParts.length - 2];
for (int i = 1; i <= list.size(); i++) {
if (i > 1) b = true;
for (String s : list) {
StringTokenizer stringTokenizer = new StringTokenizer(s, ".");
String[] nameParts2 = new String[stringTokenizer.countTokens()];
int count2 = 0;
while (stringTokenizer.hasMoreTokens()) {
nameParts2[count2] = (stringTokenizer.nextToken());
count2++;
}
char[] ch = nameParts2[nameParts2.length - 1].toCharArray();
if (i == (Integer.parseInt(Character.toString(ch[ch.length - 1])))) {
writeToFile(s, outputFileName, b);
}
}
}
reader.close();
}
private static void writeToFile(String inputFile, String outputFile, boolean isFinishing) throws IOException {
FileInputStream inputStream = new FileInputStream(inputFile);
FileOutputStream outputStream = new FileOutputStream(outputFile, isFinishing);
byte[] buffer = new byte[1000];
while (inputStream.available() > 0) {
int count = inputStream.read(buffer);
outputStream.write(buffer, 0, count);
}
inputStream.close();
outputStream.close();
}
}
Leave A Comment