22

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?

}

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

4

7 に答える 7

38

FileChannel.truncateを使用します:

try (FileChannel outChan = new FileOutputStream(f, true).getChannel()) {
  outChan.truncate(newSize);
}
于 2013-01-11T14:44:33.150 に答える
12

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

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

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

他のStandardOpenOptionsも許可します。

于 2016-03-30T17:54:07.063 に答える
8

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

于 2013-01-11T14:48:07.810 に答える
3

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

于 2013-01-11T14:42:42.360 に答える
1

RandomAccessFile.setLength()この場合、正確に規定されているようです。

于 2020-04-15T18:57:45.637 に答える
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);
于 2013-01-11T14:41:55.160 に答える
0

Apache CommonsIOAPIを使用します。

    org.apache.commons.io.FileUtils.write(new File(...), "", Charset.defaultCharset());
于 2020-04-26T20:06:23.040 に答える