package com.javarush.task.task18.task1825;
import java.io.*;
import java.util.*;
/*
Собираем файл
*/
public class Solution {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
String string;
while (!(string = scanner.nextLine()).equals("end")) {
list.add(string);
}
Map<Integer, String > map = new TreeMap<>();
int lastIndex = list.get(0).indexOf("part");
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
String partStr = s.substring(lastIndex + 4);
int part = Integer.parseInt(partStr);
map.put(part, s);
}
String fullName = list.get(0).substring(0, lastIndex-1);
// System.out.println(fullName);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File(fullName), true));
Set set = map.entrySet();
for (Object o : set) {
Map.Entry m = (Map.Entry) o;
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(new File((String) m.getValue())));
byte[] bytes = new byte[bufferedInputStream.available()];
bufferedInputStream.read(bytes);
bufferedOutputStream.write(bytes);
bufferedInputStream.close();
}
bufferedOutputStream.close();
}
}
Soros
39 уровень
Все условия выполнены, но валидатор не принимает по третьему
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pavlo PlynkoJava-разработчик в CodeGymExpert
26 декабря 2019, 09:23
Попробуй использовать конструктор FileInputStream принимающий строку, а не файл.
0
Soros
26 декабря 2019, 14:33
А почему?
Ведь я учусь.
Файл в конструктор передавать считается более безопасно, чем строку (наверное, где-то в ютубе было сказано) .
В любом случае, как это влияет на выполнение условия последовательности записи?
0
Pavlo PlynkoJava-разработчик в CodeGymExpert
26 декабря 2019, 14:51
Не влияет, в твоей программе с последовательностью все ок. Валидатор немного подправить надо.
0
Soros
26 декабря 2019, 16:54
Ок. Спасибо.
0
JustinianJudge в Mega City OneMaster
26 декабря 2019, 19:00решение
Строки такие как
и
Не пишут.
Монструозные конструкции, если я попрошу тебя сказать сколько операторов в строке,сколько классов и тд, я не уверен что ты правильно посчитаешь количество, 7 операторов в первой строке, 9 во второй, 4-5 классов, это как карточный домик строить.
Каждая строка джава программы должна содержать разумное количество операций.
Разумность определяется на глаз, но такое количество это явно далеко за пределами разумности. К примеру в код конвеншене применяемом в компании Гугл, ограничение на 80 символов, и это максимальное количество, у тебя в полтора раза больше.
Такое плохо читается, плохо поддерживается и потенциальный источник ошибок.
Также не совсем понятно такое решение:
Вот такие штуки как приведение (Map.Entry) , это потенциальные ошибки в рантайме, чем меньше их в коде тем лучше, есть случаи когда нельзя без приведения, но в данном случае, использование не параметризированных коллекций не рекомендуется.
Можно было написать вот так:
Если ты решил прямо вот так, хотя как я понимаю, здесь же тебе не нужна Map.Entry, тебе только имя файлов нужны?
А значит достаточно:
и вот тебе итерация по именам файлов.
Насчет первых моментов, рекомендую Clean code Роберта Марти
+2
Soros
26 декабря 2019, 19:20
Спасибо.
0
Ksenia VolkovaJava Developer в DXCMaster
25 декабря 2019, 19:53
Если программа получит файлы с названиями
Lion.avi.part1
Lion.avi.part2
Lion.avi.part3
Lion.avi.part11
как ты думаешь, в каком порядке они окажутся в TreeMap?
0
Soros
26 декабря 2019, 07:31
0