п.4 - все так и есть. Разными способами решал - ничего не помогает
В метод main первым параметром приходит путь к файлу1, вторым - путь к файлу2. Файл1 содержит слова, разделенные пробелом или переводом строки (в файле может быть несколько строк).
Все, что не относится к пробелу или переводу строки, разделителем не считать.
Записать в одну строку через запятую в Файл2 слова, длина которых строго больше 6.
В конце файла2 запятой не должно быть.
Закрыть потоки.
Пример выходных данных в файл2: длинное,короткое,аббревиатура
Требования:
Программа НЕ должна считывать данные с консоли.
Программа должна считывать содержимое первого файла (используй FileReader c конструктором String).
Поток чтения из файла (FileReader) должен быть закрыт.
Программа должна записывать через запятую во второй файл все слова из первого файла длина которых строго больше 6(используй FileWriter).
Поток записи в файл (FileWriter) должен быть закрыт.
Я помню чудное мгновенье:
Передо мной явилась ты,
Как мимолетное виденье,
Как гений чистой красоты.
0
Комментарии (14)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
1. Создай блок - try-with-resources.
2. Создай в нем BufferedReader который будет принимать в параметры - new FileReader(args[0]) и еще в нем создай твой FileWriter который будет принимать - args[1].
3. Создай boolean переменную isFirst которая сразу же будет инициализирована - true(она пригодится потом).
4. Сделай проверку на то что у нас в файле из которого мы будем читать есть хоть что-то.
5. Создай наш массив строк, назови его words или как хочешь и к нему присвой считанную строку разделенную пробелами.
6. Половина дела сделана осталось только несколько строчек, создай for-each и в нем будет создаваться переменная String с названием word он будет браться из списка words.
в нашем for-each будет проверка если длинна слова больше 6 то записывай в наш FileWriter слово word.
7. Но ты наверное уже обратил внимание на isFirst и он сейчас будет использован, ведь нам надо - "Записать в одну строку через запятую в Файл2 слова, длина которых строго больше 6 и еще то, что я сделать забыл - "В КОНЦЕ ФАЙЛА2 ЗАПЯТОЙ НЕ ДОЛЖНО БЫТЬ, и это мы сделам с помощью нашей переменной isFirst, перед нашей записью сделай проверку если isFirst не равен true(можно сделать просто !isFirst), то ставишь в файл запятую, а в конце после того как в файл записал FileWriter записал слово word, присвой к нашей переменной isFirst - false.
Да вроде примерно так и сделано только без сплита и массива ( но я так тоже пробовал). А разделение через запятую у меня итак корректно делается через Collectors.joining(","). Проверку на то что файл не пустой сделал - не помогает
Наверно в Stream был другой версии ведь вроде java rush поддерживает версии до какой то точно не помню. А ты использовал те, что еще не появились на момент создания у меня часто были такие ошибки.
Тебя вообще не смущает что разбиение по пробелу тупо проигнорирует наличие запятых? И например "оченьдлинноеслово," которое твоим методом запишется прекрасно в выходной файл, может оказаться последним в нём, чем провелит одно из условий.
Кроме того что за непонятный шаманизм с isFirst? Что именно first и как оно должно работать? запятую же не один раз надо ставить :) а words.length -1 раз где words это результирующий набор слов на запись.
Есть масса адекватных методов сборки строки через разделитель, от StringBuilder, в котором просто срезается последний символ перед записью в файл, до джойна коллекции/массива, посмотри например на String.join() метод оно тоже запятую в конец не ставит.
Я бы еще посоветовал использовать try-with-resources но он тут не для всех задач подходит, тогда вопрос flush() и close() не вставал бы. Не помню тчоно как оно там реализовано если честно, но вроде при автозакрытии потоков оно и флашится само, давно смотрел туда уже.
Интересный код, надо запомнить. Но он не выводит как задано в задании, Вроде должен но почему то выводит исходный текст как есть. try-with-resources тоже не принимает