#java
#java
Вопрос:
Итак, мне нужно создать код, который увеличит размер текста, pdf, jpg, … до или равного 1474560 (размер дискеты).Вопрос в том, как сделать это ограничение таким, чтобы запись файла прекращалась до размера 1474560.
void newFileParser(String initialPath, String finalPath){
try{
FileWriter writeFile = new FileWriter(finalPath,true);
File newfile = new File(finalPath);
while(newfile.length() < 1474560){
writeFile.write("0n");
}
writeFile.close();
if(newfile.length() <= 1474560){
System.out.println("New file is done");
}
System.out.println("The size of the NewFile: " newfile.length());
}
catch (IOException e){
System.out.println("An error occurred");
e.printStackTrace();
}
}
Комментарии:
1. В чем проблема с вашим текущим кодом?
2. размер моего выходного файла больше, чем должен быть
3. Похоже, что вы записываете два байта, поэтому, если ваш начальный файл имеет нечетный размер, вы получите ошибку off by 1.
4. Если у меня есть пустой файл, то он работает нормально, но если я помещаю файл jpg или pdf, то он превышает предельный размер 1474560
5. В чем смысл всего этого? Предположим, что ваш файл имеет 2_500_000 байт? Предполагается ли, что любой байт после 1_474_560 будет удален?
Ответ №1:
Вы используете FileWriter
который буферизует выходные данные. Это означает, что newFile.length()
может вернуть не то количество байт, которое вы записали, а то количество байт, которое в данный момент сброшено на диск.
Просто используйте цикл с определенным количеством итераций. И не забудьте либо закрыть программу записи в finally
предложении, либо использовать try-with-resources
, как показано ниже:
void newFileParser(String initialPath, String finalPath) {
File newfile = new File(finalPath);
long initialLength = 0;
if (newfile.exists()) {
initialLength = newfile.length();
}
try (FileWriter writeFile = new FileWriter(finalPath, true)) {
for (int i = 0; i < 1474560 - initialLength; i ) {
writeFile.write(0);
}
}
catch (IOException e) {
System.out.println("An error occurred");
e.printStackTrace();
}
System.out.println("The size of the NewFile: " newfile.length());
}
Комментарии:
1. @VadimDoga Я почти уверен, что код работает с новым файлом. Если вам нужно запустить его на существующем файле, вам следует уменьшить количество итераций на начальную длину файла. Я обновил код.