在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?
}
由于该文件充当占位符,因此无法删除该文件。
答案 0 :(得分:32)
try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
outChan.truncate(newSize);
}
答案 1 :(得分:8)
new FileWriter(f)
将在打开时截断文件(到零字节),之后你可以在其上写行
答案 2 :(得分:5)
使用Files.write() ...
的一个班轮Files.write(outFile, new byte[0], StandardOpenOption.TRUNCATE_EXISTING);
也可以先使用File.toPath()从File转换为Path。
还允许其他 StandardOpenOptions 。
答案 3 :(得分:2)
这取决于您要如何写入文件,但最简单的方法是打开一个新的FileOutputStream,而不指定您计划附加到该文件(注意:基础{{1}构造函数将截断该文件,但是如果你想明确该文件被截断,我推荐使用双参数变体。)
答案 4 :(得分:1)
RandomAccessFile.setLength()
似乎正是这种情况下的规定。
答案 5 :(得分:0)
使用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);
答案 6 :(得分:0)
使用Apache Commons IO API:
org.apache.commons.io.FileUtils.write(new File(...), "", Charset.defaultCharset());