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)
は、開いたときにファイルを(ゼロバイトに)切り捨てます。その後、ファイルに行を書き込むことができます。
Files.write() ..を使用する1つのライナー.
Files.write(outFile, new byte[0], StandardOpenOption.TRUNCATE_EXISTING);
File.toPath() を使用して、ファイルからパスに事前に変換することもできます。
他のStandardOpenOptionsも許可します。
ファイルへの書き込み方法によって異なりますが、最も簡単な方法は、ファイルに追加する予定を指定せずに、新しい FileOutputStream を開くことです(注:ベースFileOuptutStream
コンストラクターはファイルを切り捨てますが、ファイルが切り捨てられていることを明確にしたい場合は、2パラメーターバリアントを使用することをお勧めします)。
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);