Собираем файл

  • 20
  • Недоступна
Собираем файл из кусочков. Считывать с консоли имена файлов. Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37. Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end". В папке, где находятся все прочтенные файлы, создать фа
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (624)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Игорь Team Lead
вчера, 19:22
да есть много подводных камней в этой задаче, будьте бдительны, обкладывайтесь тестами 😀
Роман мастер-энергетик
3 октября, 17:02
Сделал так, но только один пункт верный, валидатор припомнил все ошибки, которых нет, от не закрытых потоков до статических переменных... Проверил код - работает.
String fileName;
      TreeSet<String> fileNames = new TreeSet<>();

      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
      fileName = reader.readLine();
      while (!fileName.equals("end")) {
          fileNames.add(fileName);
          fileName = reader.readLine();
      }
         reader.close()

      String file = null;
      for (String s : fileNames)
          if (!s.contains(".part")) file = s;

      assert file != null;
      try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) {
          for (String s : fileNames) {
              if (s.contains(".part")) {
                  BufferedReader reader1 = new BufferedReader(new FileReader(s));
                  while (reader1.ready()) writer.write(reader1.readLine());
                  reader1.close();
              }
          }
      }
Стас
Уровень 30, Уфа
21 сентября, 12:06
Через БАОС валидатор не пропустил, заставил обычный буффер сделать. Создание нового файла через Файлз его ваще набок завалило...
Игорь Team Lead
вчера, 18:29
использование буфера - это условие №4.
11 сентября, 11:51
Все работает, но не пропускает
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader linksReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedOutputStream bufOut = new BufferedOutputStream(new FileOutputStream("d:/file1.txt"));
        Set <String>list = new TreeSet<String>();
        String fileLink;
        while (!(fileLink=linksReader.readLine()).equals("end")){
           list.add(fileLink); }

        for (String links : list){
            BufferedInputStream bufIn = new BufferedInputStream(new FileInputStream(links));
            int data;
           while (bufIn.available()>0){
               data = bufIn.read();
                bufOut.write(data);  }
            }
        linksReader.close();
        bufOut.close();
    }
}
Dvio
Уровень 26, Vladimir, Russian Federation
12 сентября, 11:59
Файл с результатом должен быть в той же директории, что и исходные файлы
12 сентября, 13:11
он в той же :)
hint1k
Уровень 32
7 сентября, 14:53
Через TreeMap сделал, чтобы авто-сортировка была: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); TreeMap<String, String> map = new TreeMap<String, String>(); String outputFileName = " "; while (true) { String string = br.readLine(); if (string.equals("end")) { break; } else { int index = string.lastIndexOf(".part"); int size = string.length(); // посчитал длину имени файла чтобы разбить на 2 части String extName = string.substring(index, size); String fileName = string.substring(0, index); map.put(extName, fileName); outputFileName = fileName+".avi"; } } FileOutputStream fos = new FileOutputStream(outputFileName); for ( Map.Entry file : map.entrySet()) { String str1 = (String)file.getKey(); String str2 = (String)file.getValue(); FileInputStream fis = new FileInputStream(str2+str1); while (fis.available()>0) { fos.write(fis.read()); } } fos.close(); br.close(); } }
Николай Данилов
Уровень 25, Москва, Russian Federation
27 августа, 13:20
Странный валидатор))) считывал имена файлов так: while (!reader.ready()) { String path = reader.readLine(); if (path.equals("end")) break; arrayFileName.add(path); } сколько тестов не делал, все работало, но валидатор не принимал. причем выдавал ошибки по всем пунктам кроме последнего. пои тогу сделал так: while (!(path = reader.readLine()).equals("end")) { arrayFileName.add(path); } остальное ничего не менял и валидатор принял. может кто знает, что не так с моим считыванием имен файлов?
Алексей С
Уровень 30, Россия
26 августа, 21:05
Условие задание совсем сбивает с толку.
Yakov Bashkurov
Уровень 19, Тобольск, Россия
24 августа, 07:16
Напишу об ошибках, с которыми столкнулся, и которые влияют на решение валидатора. 1. BufferedReader/BufferedWriter не работают здесь. Наверно, потому что в задании сказано переписать все БАЙТЫ. А кто у нас занимается байтовыми потоками? Правильно: BufferedInputStream/BufferedOutputStream. Скорее всего, нельзя тут сказать: "валидатор негодяй". В условиях же это написано. Изюминка, а не баг. 2. Не закрывались потоки потому что у меня было так:
for (Map.Entry<Integer, String> pair : parts.entrySet()) {
            br = new BufferedInputStream(new FileInputStream(pair.getValue()));
            while (br.available() > 0)  {
                int line = br.read();
                bw.write(line);
            }
        }
        br.close();
        bw.close();
а надо закрывать потоки каждый раз, когда эта конструкция отрабатывает. Я записал вот так:
for (Map.Entry<Integer, String> pair : parts.entrySet()) {
            br = new BufferedInputStream(new FileInputStream(pair.getValue()));
            while (br.available() > 0)  {
                int line = br.read();
                bw.write(line);
            }
            br.close();
            bw.close();
        }
        br.close();
        bw.close();
voodookiidoo
Уровень 38, Russian Federation
11 августа, 20:09
мать честная, местный валидатор это конечно феерический ужас
An N
Уровень 30, Cheboksary, Russian Federation
9 августа, 08:14
С удивлением обнаружил в правильном решении new Comparator. Зачем он, если заводской компаратор отлично работает?
Михаил
Уровень 22
26 августа, 17:02
Попробуйте посмотреть через дебаг в каком порядке будут записаны:
part1
part2
part3
...
part10
part11
Так как сравнение идёт в натуральном порядке для String, то получим:
part1
part10
part11
part2