Мар
28
Слияние файлов
package com.javarush.test.level18.lesson10.home10; /* Собираем файл Собираем файл из кусочков Считывать с консоли имена файлов Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37. Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end" В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN]. Например, Lion.avi В него переписать все байты из файлов-частей используя буфер. Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю. Закрыть все потоки ввода-вывода Темповые файлы создавать нельзя, т.к. на сервере заблокирована возможность создания каких любо файлов */ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; public class Solution { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); ArrayList<String> parts = new ArrayList<String>(); FileInputStream fileInputStream = null; String nextFileName = null; //Читаем файлы пока не "end" while (true) { if ("end".equals(nextFileName = scanner.nextLine())) break; else parts.add(nextFileName); } scanner.close(); //Сортируем коллекцию Collections.sort(parts, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.toString().compareTo(o2.toString()); } }); //Выходной файловый поток String outputFileName = parts.get(0).split(".part")[0]; FileOutputStream fileOutputStream = new FileOutputStream(outputFileName); //Сливаем файлы for (String partsFileNames : parts) { fileInputStream = new FileInputStream(partsFileNames); byte[] buffer = new byte[fileInputStream.available()]; fileInputStream.read(buffer); fileOutputStream.write(buffer); fileInputStream.close(); } fileOutputStream.close(); System.out.println("Объединение файлов выполнено!"); } }