У меня проблема с одной из задач: Чтение 3 имен файлов из консоли: файл1, файл2, файл3. Разделить файл: сохранить половину фрагментов в файл2, а вторую половину — в файл3. Если количество байтов даже не равно, сохраните больше байтов в файле2. Закрыть потоки.
Мне было интересно, как это решить, и единственное решение, которое работает правильно, это:
public class main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String a = reader.readLine();
String b = reader.readLine();
String c = reader.readLine();
FileInputStream fileInputStream1 = new FileInputStream(a);
FileOutputStream fileOutputStream2 = new FileOutputStream(b);
FileOutputStream fileOutputStream3 = new FileOutputStream(c);
byte[] buffer = new byte[fileInputStream1.available()];
if (fileInputStream1.available() % 2 != 0) {
while (fileInputStream1.available() > 0) {
int count = fileInputStream1.read(buffer);
fileOutputStream2.write(buffer, 0, count / 2+1);
fileOutputStream3.write(buffer, count / 2+1, count/2);
}
} else {
while (fileInputStream1.available() > 0) {
int count = fileInputStream1.read(buffer);
fileOutputStream2.write(buffer, 0, count / 2);
fileOutputStream3.write(buffer, count / 2, count/2);
}
}
fileInputStream1.close();
fileOutputStream2.close();
fileOutputStream3.close();
}
}
Мой вопрос: почему я должен сохранять от count/2 до count/2? Для меня это не имеет никакого смысла. Если я буду использовать числа, предположим, что файл file1 имеет 100 байт. Я сохраняю от 0 до count/2 (100/2=50) и от count/2 до count/2 (от 100/2=50 до 100/2=50 или даже 50/2=25). На мой взгляд, это должно быть от 0 до count/2 и от count/2 до count или buffer.length
Пожалуйста, объясните мне, почему мои решения неверны по сравнению с правильным. Спасибо.
OutputStream.write
. Третий параметр — это длина части массива для записи, а не позиция. Кроме того, ваше решение неверно, посколькуavailable()
не дает вам количество байтов в файле, а только те, которые доступны для чтения в следующей операции чтения. Это также только оценка. Очень важно читать документацию. - person RealSkeptic   schedule 05.05.2020