在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());