kendini silmeden metin dosyasının içeriği nasıl silinir


89

'A' dosyasının içeriğini 'B' dosyasına kopyalamak istiyorum. kopyalama tamamlandıktan sonra 'A' dosyasının içeriğini temizlemek ve üzerine baştan yazmak istiyorum. Başka bir görevle ilgili olduğu için 'A' dosyasını silemiyorum.

İçeriği java'nın dosya API'sini (readLine ()) kullanarak kopyalayabildim, ancak dosyanın içeriğini nasıl temizleyeceğimi ve dosya işaretçisini dosyanın başlangıcına nasıl ayarlayacağımı bilmiyorum.

Yanıtlar:


135

Dosyaya boş bir dize yazdırmanız yeterlidir:

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

14
Yazma gerekli değildir ve başka bir görevin dosyayı açması durumunda açılması mümkün olmayabilir.
Marquis of Lorne

writer.close ??, 2017 yılındayız !!!. Ayrıca, metnin üzerine yazılacağı için yazdırmaya ("") gerek yok
FSm

1
@Andro, zaman damgasını ve etiketleri fark ettiniz mi? O zamanlar bir dosyayı Android cihazlarda boşaltmanın en güvenilir yolu olduğunu hatırlıyorum.
Vlad

@ Sevgili Şimdi yazarı kapatmaya gerek yoksa, cevabı güncellemek için bu iyi bir fikir olabilir mi?
Satır

72

Dosyaya boş bir dizge yazmanız gerektiğine bile inanmıyorum.

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

9
Bu konuda haklısın. Bir yazıyı gösteren tüm cevaplar yanlış veya en iyi ihtimalle gereksizdir.
Marquis of Lorne

33
Peki ya sadece new PrintWriter("filepath.txt").close();?
Supuhstar

1
java docs'dan alıntı "Dosya mevcutsa, sıfır boyuta kısaltılacaktır"
Pinkerton

1
ancak dosya ekleme modundaysa ne yapılmalı.
GURMEET SINGH

Ah adamım basit cevabı kaçırdığıma inanamıyorum. Dosyayı kesme modunda açın. Kesik moddan o kadar nefret ediyorum ki beni kaydırdı.

30

RandomAccessFile sınıfında setLength () yöntemini istiyorsunuz.


5
Dosyayı silmediği için aslında tek doğru cevap budur. Diğer tüm cevaplar öyle.
Marquis of Lorne

Buna ihtiyacım var çünkü logback-android kütüphanesi tarafından oluşturulan günlük dosyasını temizlemek istiyorum . Günlük dosyasını manuel olarak silersem, kitaplık, uygulamamı yeniden başlatana kadar yazmak için bir günlük varsa onu yeniden oluşturacak kadar akıllı değildir. Bu yüzden bu yöntemi kullandım ve çalıştım. Ben pek çalışmıyorum. En iyi yaklaşım bu değil mi? Lütfen tavsiye.
Yeung

İşin garibi, bir üretim sorunum var çünkü .apk dosyasından yüklenen bir uygulama için fileOnSdCard.setLength (0) çağırdığımda Intenso kart sınıfı 10 donuyor (ve pil sıfırlamaya zorlanıyor). 4. sınıf kartı sorunu asla göstermedi.
Poutrathor



6

Aşağıdakilere ne dersiniz:

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

5

A'dan B'ye kopyaladıktan sonra, A dosyasını tekrar yazma moduna açın ve içine boş bir dize yazın


5

Java için en iyi arkadaşlardan biri Apache Projeleridir ve lütfen ona bakın. Dosya ile ilgili işlemler için Commons IO projesine başvurabilirsiniz .

Aşağıdaki bir satır kodu dosyayı boşaltmamıza yardımcı olacaktır.

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

4

Sadece yaz:

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

2

Dosyaya boş bir dize yazın, temizleyin ve kapatın. Dosya yazarının ek modunda olmadığından emin olun. Bence bu hile yapmalı.


2

Daha sonra yazarı kullanmanız gerekmiyorsa, bunu yapmanın en kısa ve en temiz yolu şu şekilde olacaktır:

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

1

kullanarak: Yeni Java 7 NIO kitaplığı, deneyin

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

Yukarıdaki kod, dizini oluşturmuyorsa Directoty'nin var olup olmadığını kontrol eder, dosyanın var olup olmadığını kontrol eder, boş dizge yazar ve tamponu temizler, sonunda yazarı boş dosyayı gösterirsiniz.


0

Kullanabilirsiniz

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

Kullanmamayı unutma

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

Dosya yazarı yapıcısındaki True, eklemeyi etkinleştirir.


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

SO'ya hoş geldiniz! Kodunuzun okunmasını kolaylaştırmak için lütfen yerleşik biçimlendirme araçlarını kullanın.
Michael L.

0

Kaynakla deneme ile yazar otomatik olarak kapatılacaktır:

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

Tek yapmanız gereken dosyayı kesme modunda açmaktır. Sınıf dışı herhangi bir Java dosyası bunu sizin için otomatik olarak yapacaktır.


-2

olarak genel bir yöntem yazabilirsiniz (çok geç ancak aşağıdaki kod size / başkalarına yardımcı olacaktır)

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
Bu boş bir dosya oluşturmaz, içinde bir boş bayt olan bir dosya oluşturur.
Marquis of Lorne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.