Ответ 1
Используйте FileChannel # truncate().
try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
outChan.truncate(newSize);
}
Каков наилучший способ усечения файла на Java? Например, эта фиктивная функция, как пример, чтобы прояснить намерение:
void readAndTruncate(File f, List<String> lines)
throws FileNotFoundException {
for (Scanner s = new Scanner(f); s.hasNextLine(); lines.add(s.nextLine())) {}
// truncate f here! how?
}
Файл не может быть удален, так как файл действует как владелец места.
Используйте FileChannel # truncate().
try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
outChan.truncate(newSize);
}
new FileWriter(f)
будет обрезать ваш файл при открытии (до нуля байтов), после чего вы можете писать строки к нему
Это зависит от того, как вы собираетесь писать в файл, но самым простым способом является открытие нового FileOutputStream без указания который вы планируете добавить в файл (обратите внимание: базовый конструктор FileOuptutStream
обрезает файл, но если вы хотите четко указать, что усеченный файл, я рекомендую использовать двухпараметрический вариант).
Один вкладыш с использованием Files.write()...
Files.write(outFile, new byte[0], StandardOpenOption.TRUNCATE_EXISTING);
Можно использовать File.toPath() для преобразования из файла в путь ранее.
Также разрешает другие СтандартныеOpenOptions.
Используйте RandomAccessFile # read и переместите байты, записанные таким образом, в новый объект File
.
RandomAccessFile raf = new RandomAccessFile(myFile,myMode);
byte[] numberOfBytesToRead = new byte[truncatedFileSizeInBytes];
raf.read(numberOfBytesToRead);
FileOutputStream fos = new FileOutputStream(newFile);
fos.write(numberOfBytesToRead);