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?
}

该文件不能被删除,因为该文件作为占位符。

使用filecchannel .truncate:

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

一行使用Files.write()…

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

也可以使用File. topath()将文件优先转换为路径。

还允许其他StandardOpenOptions

new FileWriter(f)将在打开时截断文件(到零字节),之后您可以向其写入行

这取决于您将如何写入文件,但最简单的方法是打开一个新的FileOutputStream,而不指定您计划追加到文件(注意:基本FileOuptutStream构造函数将截断文件,但如果您想明确文件正在被截断,我建议使用双参数变体)。

RandomAccessFile.setLength()似乎正是这种情况下的规定。

使用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);

使用Apache Commons IO API:

    org.apache.commons.io.FileUtils.write(new File(...), "", Charset.defaultCharset());

相关内容

  • 没有找到相关文章

最新更新