bagaimana menghapus konten file teks tanpa menghapus sendiri


89

Saya ingin menyalin konten file 'A' ke file 'B'. setelah penyalinan selesai saya ingin menghapus isi file 'A' dan ingin menulis di atasnya dari awal. Saya tidak dapat menghapus file 'A' karena terkait dengan beberapa tugas lain.

Saya dapat menyalin konten menggunakan API file java (readLine ()), tetapi tidak tahu cara menghapus konten file dan mengatur penunjuk file ke awal file.

Jawaban:


135

Cetak saja string kosong ke dalam file:

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

14
Penulisan tidak diperlukan, dan jika tugas lain membuat file terbuka, mungkin tidak dapat dilakukan.
Marquis dari Lorne

writer.close ??, kita berada di 2017 !!!. Juga, tidak perlu mencetak (""), karena teks akan ditimpa
FSm

1
@Andro, perhatikan stempel waktu dan tagnya? Saat itu saya ingat itu adalah cara paling andal untuk mengosongkan file di seluruh perangkat Android.
Vlad

@Vlad Jika penulis tidak perlu menutup sekarang, mungkin ini ide yang baik untuk memperbarui jawaban?
Jalur

72

Saya tidak percaya Anda bahkan harus menulis string kosong ke file.

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

9
Anda benar tentang itu. Semua jawaban yang menunjukkan tulisan salah atau paling berlebihan.
Marquis dari Lorne

33
Bagaimana dengan hanya new PrintWriter("filepath.txt").close();?
Supuhstar

1
kutipan dari java docs "Jika file tersebut ada maka akan dipotong menjadi ukuran nol"
Pinkerton

1
tapi apa yang harus dilakukan jika file dalam mode append.
GURMEET SINGH

Ya ampun, saya tidak percaya saya melewatkan jawaban sederhana. Buka file dalam mode truncate. Saya sangat benci mode pemotongan sehingga saya tergelincir.

30

Anda ingin metode setLength () di kelas RandomAccessFile.


5
Ini sebenarnya satu-satunya jawaban yang benar, karena tidak menghapus file. Semua jawaban lain bisa.
Marquis dari Lorne

Saya memerlukan ini karena saya ingin menghapus file log yang dibuat oleh perpustakaan logback-android . Jika saya menghapus file log secara manual, perpustakaan tidak cukup pintar untuk membuatnya lagi jika ada log untuk ditulis sampai saya meluncurkan kembali aplikasi saya. Oleh karena itu, saya menggunakan metode dan pekerjaan ini. Saya belum banyak belajar. Bukankah ini pendekatan terbaik? Tolong saran.
Yeung

lucunya, saya memiliki masalah produksi karena kartu Intenso kelas 10 membeku (dan memaksa reset baterai) ketika saya memanggil fileOnSdCard.setLength (0) untuk aplikasi yang diinstal dari file .apk. Kartu kelas 4 mereka tidak pernah menunjukkan masalah tersebut.
Poutrathor



6

Bagaimana dengan dibawah ini:

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

5

Setelah menyalin dari A ke B buka file A lagi ke mode tulis dan kemudian tulis string kosong di dalamnya


5

Salah satu pendamping terbaik untuk java adalah Proyek Apache dan silakan merujuk ke sana. Untuk operasi terkait file, Anda dapat merujuk ke proyek Commons IO .

Kode baris di bawah ini akan membantu kita mengosongkan file.

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

4

Tulis saja:

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

2

Tulis string kosong ke file, flush, dan close. Pastikan bahwa penulis file tidak dalam mode append. Saya pikir itu harus melakukan trik.


2

Jika Anda tidak perlu menggunakan penulis setelahnya, cara terpendek dan terbersih untuk melakukannya adalah seperti itu:

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

1

menggunakan: Pustaka Java 7 NIO baru, coba

        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();

Kode di atas memeriksa apakah Directoty ada jika tidak membuat direktori, memeriksa apakah file ada ya itu menulis string kosong dan membersihkan buffer, pada akhirnya Anda membuat penulis menunjuk ke file kosong


0

Kamu bisa memakai

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

Ingatlah untuk tidak menggunakan

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

True dalam pembuat file, konstruktor akan mengaktifkan append.


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

Selamat datang di SO! Harap gunakan alat pemformatan bawaan untuk membuat kode Anda lebih mudah dibaca.
Michael L.

0

Dengan try-with-resources, penulis akan ditutup secara otomatis:

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

Yang harus Anda lakukan adalah membuka file dalam mode truncate. Semua kelas keluar file Java akan secara otomatis melakukannya untuk Anda.


-2

Anda dapat menulis metode umum sebagai (sudah terlambat tetapi kode di bawah ini akan membantu Anda / orang lain)

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
Ini tidak membuat file kosong, ini membuat file dengan satu byte null di dalamnya.
Marquis dari Lorne
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.