Все проверил, при четном, и нечетном количестве байт, все верно записывается в 2 файла)
И кстати, все потоки закрыты!)
Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать большую часть. Закрыть потоки.
Требования:
Программа должна три раза считать имена файлов с консоли.
Для чтения из файла используй поток FileInputStream, для записи в файлы - FileOutputStream
Первую половину байт из первого файла нужно записать во второй файл.
Вторую половину байт из первого файла нужно записать в третий файл.
Потоки FileInputStream и FileOutputStream должны быть закрыты.
....
1234567
0
Комментарии (8)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Метод main не должен выбрасывать исключения.
Часть кода нужно завернуть в try catch finally. Тогда можно будет точно быть увереным что твои потоки будут закрыты.
Если не переопределять fos на new FileInputStream, а сделать 2 потока:
fosSecond = new FileOutputStream(secondFile);
fosThird = new FileOutputStream(thirdFile);
и в конце
fosSecond.close;
fosThird.close;
то решается вопрос с валидацией по последнему пункту, хотя по логике, все закрыто.
Статические переменные нужны там, где должны быть объекты, общие для всех экземпляров класса. Здесь это явно ни к чему - может, мне понадобится создать несколько экземпляров Solution, каждый - для работы со своим файлом, а у тебя получится один поток на всех.
Объявлять переменные желательно как можно ближе к месту их использования.
У тебя они используются в main - вот там их и объявляй.
Потоки FileInputStream и FileOutputStream должны быть закрыты.
Про системный ничего не сказано.
И кстати, поток записи в 3-й файл ты закрываешь. А во второй - нет.
С одной стороны, по поводу статических согласен, хотя в данном случае у меня все работало так как нужно), я сейчас перенес объявление всех переменных в main за исключением
static FileInputStream fis;
static FileOutputStream fosSecond;
static FileOutputStream fosThird;
так как без этого в блоке
try {
fileNameReader.close();
fis.close();
fosSecond.close();
fosThird.close();
} catch
писали, что не видят инициализацию fosSecond и fosThird, так как она происходит в другом try catch.
Валидацию полностью прошло, но работать перестало, и идея мне предложила поменять настройки файловой системы))