Операция обрезания файла в Java

Каков наилучший способ усечения файла на 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?

}

Файл не может быть удален, так как файл действует как владелец места.

Ответ 1

Используйте FileChannel # truncate().

    try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
      outChan.truncate(newSize);
    }

Ответ 2

new FileWriter(f) будет обрезать ваш файл при открытии (до нуля байтов), после чего вы можете писать строки к нему

Ответ 3

Это зависит от того, как вы собираетесь писать в файл, но самым простым способом является открытие нового FileOutputStream без указания который вы планируете добавить в файл (обратите внимание: базовый конструктор FileOuptutStream обрезает файл, но если вы хотите четко указать, что усеченный файл, я рекомендую использовать двухпараметрический вариант).

Ответ 4

Один вкладыш с использованием Files.write()...

Files.write(outFile, new byte[0], StandardOpenOption.TRUNCATE_EXISTING);

Можно использовать File.toPath() для преобразования из файла в путь ранее.

Также разрешает другие СтандартныеOpenOptions.

Ответ 5

Используйте 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);