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