level18.lesson10.home10 Народ, нужен свежий взгляд. Что тут не так?


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.*;


public class Solution {
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        List<String> list = new ArrayList<String>();
        String s;
        while (!"end".equals(s = reader.readLine()))
        {
            list.add(s);
        }
        reader.close();
        Map<Integer, String> map = new TreeMap<Integer, String>();
        for (String x : list)
        {
            for (int i = 0; i <= list.size(); i++)
            {
                if (x.endsWith("part" + (i)))
                {
                    map.put(i, x);
                }
            }
        }
        File file = new File("c:/1/Lion.avi");

        FileOutputStream out = new FileOutputStream(file, true);
        for (Map.Entry<Integer, String> pair : map.entrySet())
        {
            FileInputStream in = new FileInputStream(pair.getValue());
            byte[] buff = new byte[in.available()];
            if (in.available() > 0)
            {
                int count = in.read(buff);
                out.write(buff, 0, count);
            }
            in.close();
        }
        out.close();

    }
}


Народ, нужен свежий взгляд. Что тут не так?

3 комментария

bridennis
Будет ли соблюдено условие задачи если:
— входящие файлы будут именоваться, к примеру как Tiger.avi.part2, Tiger.avi.part1,…
— входящие файлы будут лежать в директории d:\tmp\
Кто мешает считывать с консоли имена файлов сразу в правильный (сортированный) список?
rembrand87
Соблюдаться условия задачи будут.
Я бы на твоем месте удалил регулярными выражениями в имени файла все кроме последней цифры — потом гораздо легче отсортировать в нужном тебе порядке.
bridennis
  • bridennis
  • -1
  • Комментарий отредактирован 2016-11-06 13:57:44 пользователем bridennis
Будьте внимательны, вообще-то предыдущее сообщение адресовалось для exotika37.

И как-же будет соблюдаться условие:
Каждый файл имеет имя: [someName].partN. и далее — В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN].

Регулярки здесь излишни, достаточно банального
lastIndexOf(".");
, а сортировку можно доверить
SortedSet<String> files = new TreeSet<String>();
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.