В тестовых прогонах на файлах все работает и собирается (содержимое соответствует сортировке),
и расширения разные (avi и прочее), все равно не пропускает.
Lion.txt.part1
..
..
Lion.txt.partN
(может с сортировкой или рег. выражениях перемудрил). Что скажите?
package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Собираем файл
*/
/*
- Вводим с клавиатуры имена файлов (полный путь), пока не будет введено слово "end"
- Дальше сортируем все введенные пути (в списке или карте)
- Дальше создаем в этой же папке (тот же путь) File с названием как у предыдущих (взять из старых название)
- Проходим по листу или карте:
- создаем поток на запись в File и с параметром true, чтобы дописывалось (буферный)
- создаем поток на чтение, в него запихнем временно все байты из каждого файла (пути которых считали) (буферный)
- закрываем потоки
*/
public class Solution {
public static void main(String[] args) {
Pattern patternFinalName = Pattern.compile(".*[^part[0-9]*$]");
Pattern pattern = Pattern.compile("[0-9]*$"); // берем последние цифры строки
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream bufferedReaderInfo = null;
FileOutputStream fileWriter = null;
File putWrite = null;
Set<String> setNazvaniya = new TreeSet<String>((str1, str2) -> {
Matcher matcher = pattern.matcher(str1);
Matcher matcher2 = pattern.matcher(str2);
int chislo1 = 0;
int chislo2 = 0;
if (matcher.find() && matcher2.find()) {
chislo1 = Integer.parseInt(matcher.group());
chislo2 = Integer.parseInt(matcher2.group());
}
return chislo1 - chislo2;
});
String put = "";
boolean isExit = false;
try {
while (!isExit) {
put = bufferedReader.readLine();
if (!put.equals("end")) {
setNazvaniya.add(put);
} else {
isExit = true;
}
}
Matcher matcherName = patternFinalName.matcher(setNazvaniya.iterator().next());
if (matcherName.find()) {
String putFile = matcherName.group();
putWrite = new File(putFile);
}
// если создан новый файл успешно
if (putWrite.createNewFile()) {
fileWriter = new FileOutputStream(putWrite, true);
for (String parts: setNazvaniya) {
bufferedReaderInfo = new FileInputStream(parts);
byte[] masData = new byte[bufferedReaderInfo.available()];
while (bufferedReaderInfo.available() > 0) {
int count = bufferedReaderInfo.read(masData);
fileWriter.write(masData, 0, count);
}
fileWriter.write('\n');
bufferedReaderInfo.close();
}
}
} catch (IOException exception) {
exception.getMessage();
} finally {
try {
bufferedReader.close();
fileWriter.close();
if (bufferedReaderInfo != null ) {
bufferedReaderInfo.close();
}
} catch (IOException exception) {
exception.getMessage();
}
}
}
}