2011-11-11 42 views
11

Bu soru this sorunun Şiddetli bir kopyası farkındayım. Ancak, şimdi tüm bu sayfayı iki kez okudum, ve bazı bölümler 3 kez, ve benim için nasıl cevaplandığını göremiyorum!Java 6 Dosya Silme

Sorunum açık.

İş yerindeyim ve Java 6 SE kullanarak sıkışıp kaldım ve 7'ye yükseltemiyorum. Bir dosya oluşturan, yazan, bazı işlemleri yapan ve sonra da dosyanın varlığını silmeye ihtiyaç duyan bir program yazıyorum. Ben yukarıda başvuruda bulunduğum soruyu soran kişi ile aynı problemi yaşıyorum: Java dosyayı silmeyecek ve nedenini anlayamıyorum.

kodu: Herhangi throwables, hata veya istisnalar atma değil

File f = null; 
FileWriter fw = null; 
try 
{ 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); 
    if(f.delete()) 
     System.out.println("File was successfully deleted."); 
    else 
     System.err.println("File was not deleted."); 
} 
catch(Exception exc) 
{ 
    System.err.println(exc.getMessage()); 
} 
catch(Error er { 
    System.err.println(er.getMessage()); 
} 
catch(Throwable t) 
{ 
    System.err.println(t.getMessage()); 
} 
finally 
{ 
    fw.close(); 
} 

(I herhangi ve tüm sınır durumları ekarte etmek olanlar dahil). İkinci yazdırma bildirimi ("File was not deleted.") konsola yazdırılıyor. Bunu Windows 7'de çalıştırıyorum ve tam izinlerim (rwx) bulunan bir klasöre yazıyorum.

Onun kendi soru cevap başvurulan soruyu soran kullanıcı, ancak bunu (benim düşünceme göre) bir çok da düz ileri şekilde değil. Her halükarda, bunu anlamayı güçleştiriyorum. O, bir 'un aksine bir BufferedReader kullanmanın onun için farkı yarattığı gerçeğine itiraz ediyor gibi görünüyor, ancak bunun nasıl olduğunu görmüyorum.

Java 7, bu sorunları bir java.nio.file.Files sınıfının tanıtımıyla düzeltmiş görünüyor, ancak yine de, denetimimin kapsamı dışındaki nedenlerden dolayı Java 7'yi kullanamıyorum.

Bu başvurulan soruya verilen diğer yanıtlar, bunun Java'da bir "hata" olduğunu ve System.gc()'u açıkça arama gibi her türlü atlatmayı sağladığını ima eder. Bunların hepsini denedim ve çalışmazlar.

Belki birisi yeni bir bakış açısı katmak ve benim için biraz düşünün koşu yapabilirsiniz.

+0

Bunun bir kopyası olduğunu sanmıyorum. Önerilen çözümleri diğer sorudan denediniz ve yardım etmediklerinden, sebebin farklı olması muhtemeldir. – finnw

+2

İlk önce kapatın. Ve ... "Java 6 kullanarak takıldınız mı?" JDK7 üzerinde çalışan tek bir şirket bilmiyorum. 1.4 ve 1.5’te olanları biliyorum. Kendini şanslı say. –

+0

Lütfen söylediğiniz şeyin tam tersini not edin: BufferedReader yerine FileInputStream kullanmak, diğer gönderide kullanıcı için çalışılan şeydir. Neden olduğu konusunda, bazı yorumlarda Java'daki bir hata var. –

cevap

17

Sen) (hala aktif, açık FileWriter tarafından başvurulan bir dosyayı silmek çalışıyoruz.

bu deneyin: açılmış sol hiçbir dosya işleyicisi yoksa

f = new File("myFile.txt"); 
fw = new FileWriter(f); 
fw.write("This is a sentence that should appear in the file."); 
fw.flush(); 
fw.close(); // actually free any underlying file handles. 
if(f.delete()) 
    System.out.println("File was successfully deleted."); 
else 
    System.err.println("File was not deleted."); 
8

Yalnızca dosyayı silebilirsiniz. FileWriter kullanarak hanlder dosyasını açtığınızdan, onu silmeden önce kapatmanız gerekecek. fw.close

aşağıdaki kodu deneyin sonra başka kelime, f.delete yürütülmelidir. Tüm olası hataları engellemek için değişiklikleri yaptım, örneğin fw null ise.

File f = null; 
FileWriter fw = null; 
try { 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); // flush is not needed if this is all your code does. you data 
       // is automatically flushed when you close fw 
} catch (Exception exc) { 
    System.err.println(exc.getMessage()); 
} finally {// finally block is always executed. 
    // fw may be null if an exception is raised in the construction 
    if (fw != null) { 
     fw.close(); 
    } 
    // checking if f is null is unneccessary. it is never be null. 
    if (f.delete()) { 
     System.out.println("File was successfully deleted."); 
    } else { 
     System.err.println("File was not deleted."); 
    } 
}