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.

penjara
sumber

Jawaban:

135

Cetak saja string kosong ke dalam file:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();
Vlad
sumber
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();
camleng
sumber
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.

Burleigh Bear
sumber
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
11

Satu liner untuk melakukan operasi truncate:

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

Informasi lebih lanjut tersedia di Dokumentasi Java: https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

Michał
sumber
+1 Untuk tidak membuat instance seluruh kelas penulisan file, (dan bahkan menulis lebih buruk lagi). Ini harus menjadi jawaban yang diterima.
Kröw
6

Bagaimana dengan dibawah ini:

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

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

Rasel
sumber
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"), "")
Anver Sadhat
sumber
4

Tulis saja:

FileOutputStream writer = new FileOutputStream("file.txt");
Manh Vu
sumber
2

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

hakon
sumber
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();
Markus L.
sumber
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

harsha
sumber
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.

Revanth Kumar
sumber
0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");
Harpreet Singh
sumber
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
Bartek
sumber
0

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


sumber
-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;
}
Vishal
sumber
5
Ini tidak membuat file kosong, ini membuat file dengan satu byte null di dalamnya.
Marquis dari Lorne