2013-01-11 27 views
10

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? 

} 

ファイルを削除することはできません。

答えて

26

FileChannel#truncate()を使用してください。

+2

私は単純な 'try {new FileOutputStream(f).getChannel()。truncate(0).close();をやりました。 } catch(IOException e){/ * logと無視する* /} '質問:append == trueを指定してファイルを開くかどうかは重要ですか? – hyde

+0

次に、 'new FileWriter(f).close()'だけです。 –

+1

append == 'true'を指定せずに開くと、すぐにファイルが切り詰められます(必要な場合)。 –

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

私はRandomAccessFileを使用して読み込みを許可し、単一のファイルを開くことで切り詰めることができると思います。 – hyde

2

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

+0

ファイルに書き込もうとしません。ファイルをゼロに切り捨てたいだけです...ディスクの空き領域を食い止めるために内容を読み込んで処理する必要があります。 – hyde

+0

ええ、 'FileOutputStream'の打ち切りは理にかなっていますが、私はなぜドキュメントに言及していないのだろうと思います(ファイルは、前のファイルの内容に何も起こりません。 – hyde

8

new FileWriter(f)は、(ゼロバイト)開放時にファイルが切り捨てられますファイルからパスに変換することもできます。

標準オープンオプションも許可します。

2

一つFiles.write()を使用してライナー...

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

がにFile.toPath()を使用できることをあなたがそれに行を書き込むことができた後

try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) { 
     outChan.truncate(newSize); 
    } 
関連する問題