web-dev-qa-db-ja.com

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?

}

ファイルはプレースホルダーとして機能しているため、ファイルを削除できません。

15
hyde

FileChannel#truncate() を使用します。

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

new FileWriter(f)は、開いたときにファイルを(ゼロバイトに)切り捨てます。その後、ファイルに行を書き込むことができます。

8

Files.write() ..を使用する1つのライナー.

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

File.toPath() を使用して、ファイルからパスに事前に変換することもできます。

他のStandardOpenOptionsも許可します。

5
kervin

ファイルへの書き込み方法によって異なりますが、最も簡単な方法は、ファイルに追加する予定を指定せずに、新しい FileOutputStream を開くことです(注:ベースFileOuptutStreamコンストラクターはファイルを切り捨てますが、ファイルが切り捨てられていることを明確にしたい場合は、2パラメーターバリアントを使用することをお勧めします)。

2
parsifal

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);
0
Woot4Moo