自分自身を削除せずにテキストファイルの内容を削除する方法


89

ファイル「A」の内容をファイル「B」にコピーしたい。コピーが完了したら、ファイル「A」の内容を消去して、最初から書き込みたいと思います。他のタスクに関連しているため、ファイル「A」を削除できません。

JavaのファイルAPI(readLine())を使用してコンテンツをコピーすることはできましたが、ファイルのコンテンツをクリアしてファイルポインターをファイルの先頭に設定する方法がわかりません。

回答:


134

空の文字列をファイルに出力するだけです:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();

14
書き込みは必要ありません。また、別のタスクがファイルを開いている場合、開くこともできません。
ローンの侯爵

writer.close ??、私たちは2017年にいます!!!。また、(「」)を印刷する必要はありません、テキストが上書きされますので、
FSM

1
@Andro、タイムスタンプとタグに気付きましたか?当時は、Androidデバイス間でファイルを空にする最も信頼性の高い方法でした。
Vlad

@Vladライターを閉じる必要がない場合、回答を更新することをお勧めします。
ライン

70

空の文字列をファイルに書き込む必要すらありません。

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();

9
あなたはそれについて正しいです。書き込みを示すすべての回答は間違っているか、せいぜい冗長です。
ローンの侯爵

33
どうnew PrintWriter("filepath.txt").close();ですか?
Supuhstar

1
java docsからの引用「ファイルが存在する場合、ゼロサイズに切り捨てられます」
Pinkerton

1
しかし、ファイルが追加モードの場合はどうするか。
ガーミートシン17年

おお、私は単純な答えを逃したとは信じられない。ファイルを切り捨てモードで開きます。トランケートモードはあまりにも嫌いなので、すべってしまいました。

30

RandomAccessFileクラスにsetLength()メソッドが必要です。


5
ファイルを削除しないため、これが実際に唯一の正しい答えです。他のすべての答えはそうです。
ローンの侯爵

logback-androidライブラリによって作成されたログファイルをクリアしたいので、これが必要です。ログファイルを手動で削除した場合、アプリを再起動するまで書き込むログがある場合、ライブラリは十分に機能していないため、再度作成することはできません。したがって、私はこの方法を使用して作業しました。私はあまり勉強していません。それが最善のアプローチではありませんか?アドバイスをお願いします。
Yeung

おかしなことに、.apkファイルからインストールされたアプリに対してfileOnSdCard.setLength(0)を呼び出すと、Intensoカードクラス10がフリーズする(そしてバッテリーが強制的にリセットされる)ため、運用上の問題があります。彼らのクラス4カードは問題を示したことはありません。
Poutrathor

17

シンプル、何も書かない!

FileOutputStream writer = new FileOutputStream("file.txt");
writer.write(("").getBytes());
writer.close();

3
-1:java.lang.Stringには、6と7のどちらにもtoByteArray()メソッドがありません。docs.oracle.com/javase/ 6 /docs/api/java/lang/String
james.garriss

1
それは長い時間のために存在する:docs.oracle.com/javase/6/docs/api/java/lang/...
kmas

1
ここでは書き込みは不要です。
ローンの侯爵

10

切り捨て操作を行う1つのライナー:

FileChannel.open(Paths.get("/home/user/file/to/truncate"), StandardOpenOption.WRITE).truncate(0).close();

Javaのドキュメントで利用可能な詳細情報:https : //docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html


+1ファイル書き込みクラス全体をインスタンス化しない場合(さらに悪いことに、それを書き込む場合)。これは本当に受け入れられる答えになるはずです。
Kröw

6

以下はどうですか:

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}

5

AからBにコピーした後、ファイルAを再度書き込みモードに開き、空の文字列を書き込みます


5

Javaの最良のコンパニオンの1つはApache Projectsであり、参照してください。ファイル関連の操作については、Commons IOプロジェクトを参照できます。

以下の1行のコードは、ファイルを空にするのに役立ちます。

FileUtils.write(new File("/your/file/path"), "")

4

書くだけ:

FileOutputStream writer = new FileOutputStream("file.txt");

2

空の文字列をファイルに書き込み、フラッシュして閉じます。ファイルライターが追加モードになっていないことを確認してください。これでうまくいくと思います。


2

後でライターを使用する必要がない場合、それを行うための最短かつクリーンな方法は次のようになります。

new FileWriter("/path/to/your/file.txt").close();

1

使用:新しいJava 7 NIOライブラリ、試してください

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

上記のコードは、ディレクトリが作成されていない場合にDirectotyが存在するかどうかを確認し、ファイルが存在するかどうかを確認します。空の文字列を書き込み、バッファをフラッシュします。


0

使用できます

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

使用しないことを忘れないでください

FileWriter fw = new FileWriter(/*your file path*/,true);

ファイルライターコンストラクターでTrueを指定すると、追加が有効になります。


0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");

SOへようこそ!組み込みのフォーマットツールを使用して、コードを読みやすくしてください。
マイケルL.17年

0

リソースを使用すると、ライターは自動的に閉じられます。

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically

0

あなたがしなければならないすべては切り捨てモードでファイルを開くことです。Javaファイル出力クラスは、自動的にそれを行います。


-2

あなたはジェネリックメソッドを次のように書くことができます(手遅れですが、以下のコードはあなた/他の人を助けるでしょう)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}

5
これは空のファイルを作成せず、1つのnullバイトを含むファイルを作成します。
ローンの侯爵
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.