2011-09-25 4 views
5

Eclipse'de bir Java programı hazırladım. Windows XP'de başladım, ancak yakın zamanda yeni sürüme geçtim.Programım neden Win7'nin altında oluşturduğu dosyaları silemiyor?

Kaydetme mekanizmasının bir parçası olarak, program ayarları settings_new.sav dosyalarına yazar. Bu işlem tamamsa, settings.sav öğesini siler ve eski adı eşleştirmek için yenisini yeniden adlandırır. WinXP altında çalışırken (en azından bunu yaptığını düşündüm, ama şimdi kontrol edemiyorum), win7 altında, onu oluşturan program olsa bile, dosyayı silmez (programın farklı bir örneği olsa da)).

Dosya Eclipse tarafından alınır ve buradan çok mutlu bir şekilde silinebilir. El ile silebilirim. Kendi bilgisayarımdaki yöneticiyim. Klasör, çalışma alanı klasörünün içinde yer alır ve Program Dosyalarında yer almaz (bununla birlikte, nihai kullanıcıların oraya yüklenip yüklenmeyeceğini bilmiyorum). Program dosyaları güzelce oluşturabilir ve değiştirebilir. İstisnasız bir şey atmıyor, bunu 7 nolu bloke edip etmeyeceğini düşündüm.

Herhangi bir fikrin var mı?

cevap

9

Bu, java'daki dosya kilitleme mekanizmasından kaynaklanır. Bittiğinde BufferedReader, BufferedInputStream gibi arabellek akışlarını kapattığınızdan emin olun.

+0

Aslında Windows'da dosya kilitleme mekanizmaları. Aynı kod muhtemelen Linux altında iyi çalışır. Ama kabul ediyorum, her yerde düzgün çalışmasını sağlamak için dosyaya erişimi açıkça kapatmalısınız. –

+0

@MarkRobinson: İlginç, benim swing uygulamalarımı linux da test etmeliyim. Geliştiricilerin JVM'den ziyade OS seviyesinde problemler beklemesi gerektiği görünüyor. – PraveenMax

+1

Windows ve Linux'un farklı dosya kilitleme semantikleri vardır. Linux, kurmadan açmak için açtığınız bir dosyayı silmenize izin verecektir. Daha sonra bir sorun olmadan aynı ada sahip yeni bir dosya oluşturabilirsiniz. Windows'da, başka bir işlemde açıksa, bir dosyayı silmenizi engelleyebilir. Bunun gerçekleştiği özel durumlar, nasıl açıldığına büyük ölçüde bağlıdır (yöntem/ve erişim türüne göre). Daha fazla sorunuz varsa, Windows çocuklarına yönelik yeni bir SO sorusu göndermenizi öneririm :) –

-3

Bu soruna alışkın oldum, dosyanızı kullanmanız bittiğinde dosyanızı null olarak ayarlamak zorundasınız. Eğer böyle bir şey yapmak, yani:

public void createFile(String path) 
{ 
    File file = new File(path); 
    file.createNewFile(); 
    file = null 
} 

Eğer sistem bu dosyayı kullanarak durdurur, böylece kullanmadan bittiğinde boş dosyayı belirlemek zorunda. FileReader ve FileWriter ile aynı şeyi yapmak zorunda. Dosyaya tekrar erişmek için dosya okuyucunuzu ve dosya yazarlarınızı null olarak ayarlamanız gerekir. Bunu bir deneyin ve bana nasıl olduğunu bilmeme izin verin.

+2

Bu işe yaramayacak. Tüm yapacak olan, Java çöp toplayıcısının daha sonra almasına izin vermektir. Daha sonra tanımlanmamış. Çöp toplayıcının onu almasını beklemek yerine, dosyaya erişimi açıkça kapatmalısınız. –

+0

null, null java ayarlandığında null yapar, otomatik olarak çöp toplar. – gsfd

+2

Bu toplama için kullanılabilir olduğu anlamına gelir, bu toplama anında gerçekleşir. Olabilir, ama bu JVM'ye özgü bir davranış. –