2011-08-09 15 views
65

'A' dosyasının içeriğini 'B' dosyasına kopyalamak istiyorum. Kopyalama bittikten sonra 'A' dosyasının içeriğini silmek istiyorum ve baştan başlamak istiyorum. 'A' dosyasını başka bir görevle ilgili olarak silemiyorum.Metin dosyasının içeriğini silmeden nasıl silinir

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

cevap

99

Sadece dosyaya boş bir dize yazdırmak modunda yazmak için bir tekrar açık dosyayı B ve sonra boş bir dize yazmak için A'dan kopyaladıktan sonra RandomAccessFile sınıfında setLength() yöntemi.

+14

Yazma gerekli değildir ve başka bir görev açıksa, dosyayı açmak bile mümkün olmayabilir. – EJP

+0

writer.close ??, 2017 yılındayız!. Ayrıca, yazdırmaya gerek yok (""), çünkü metin – FSm

+1

@Andro üzerine yazılacak, zaman damgası ve etiketlerine dikkat edin? O zamanlar, Android cihazlar arasında bir dosyayı boşaltmanın en güvenilir yol olduğunu hatırlıyorum. – Vlad

2

Dosyaya boş bir dize yazın, yıkayın ve kapatın. Dosya yazıcısının ek modda olmadığından emin olun. Bence bu hile yapmalı.

13

Basit, hiçbir şey yazmayın!

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

-1: java.lang.String de, 6 veya 7 'de, bir toByteArray() yöntem yoktur http://docs.oracle.com/javase/6/docs/api/java/dili/dizesi. –

+0

Uzun zamandır var: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes() – kmas

+1

Yazmak gereksizdir. – EJP

25

Sen istiyorum:

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

Bu, aslında dosyayı silmediğinden tek doğru yanıttır. Diğer tüm cevaplar yapar. – EJP

+0

Buna ihtiyacım var çünkü [logback-android] (https://github.com/tony19/logback-android) kitaplığı tarafından oluşturulan günlük dosyasını temizlemek istiyorum. Eğer log dosyasını manuel olarak silersem, kütüphanem yeterince akıllı olmaz, eğer uygulamamı yeniden başlatıncaya kadar yazılacak günlük varsa tekrar oluştur. Bu nedenle bu yöntemi kullandım ve çalıştım. Ben fazla çalışmadım. En iyi yaklaşım bu değil mi? Lütfen tavsiye. – Yeung

+0

funnily, .apk dosyasından yüklenen bir uygulama için fileOnSdCard.setLength (0) çağıracağım Intenso kart sınıfı 10 donma (ve pil sıfırlama zorla) nedeniyle bir üretim sorunum var. Sınıf 4 kartı hiç bir zaman sorunu göstermedi. – Poutrathor

-2

Eğer (onun çok geç ancak aşağıda kodu/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; 
} 
+4

Bu, boş bir dosya oluşturmaz, içinde bir boş bayt bulunan bir dosya oluşturur. – EJP

2

gibi genel bir yöntem yazabilirsiniz Sadece yazmak:

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

ben bile gerek inanmıyorum dosyaya boş bir dize yazın. java için en iyi arkadaşı

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

+8

Bu konuda haklısınız. Bir yazmayı gösteren tüm cevaplar yanlış veya en iyi durumda. – EJP

+15

Sadece "yeni PrintWriter" ("filepath.txt") ile ilgili. Close(); '? Java docs'den – Supuhstar

+1

alıntı "Dosya varsa, o zaman sıfır boyutuna kesilecektir" – BrettG

3

biri Apache Projects ve ona bakın lütfen. Dosya ile ilgili işlemler için Commons IO projesine başvurabilirsiniz.

Aşağıdaki bir satır kodu, dosyayı boş hale getirmemize yardımcı olacaktır.

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

Sen

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

append sağlayacak FileWriter yapıcısındaki Gerçek

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

kullanmamayı unutmayın kullanabilirsiniz.Java Belgeleme

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

fazla bilgi mevcut:

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

Bir astar truncate operasyonu yapmak: Aşağıdaki nereden

1

Kullanmak gerekmiyorsa yazar daha sonra bunu yapmak için en kısa ve en temiz yolu şöyle olurdu:

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

Merhaba, kodunuzun okunmasını kolaylaştırmak için {} tuşunu kullanabilirsiniz –

+0

SO'ya Hoş Geldiniz! Kodunuzun okunmasını kolaylaştırmak için lütfen yerleşik biçimlendirme araçlarını kullanın. –

İlgili konular