File.renameTo()
Görünüşe göre Java's sorunlu, özellikle Windows'ta. Gibi API belgeleri diyor
Bu yöntemin davranışının birçok yönü, doğası gereği platforma bağlıdır: Yeniden adlandırma işlemi bir dosyayı bir dosya sisteminden diğerine taşıyamayabilir, atomik olmayabilir ve hedef soyut yol adına sahip bir dosya varsa başarılı olmayabilir. zaten var. Yeniden adlandırma işleminin başarılı olduğundan emin olmak için dönüş değeri her zaman kontrol edilmelidir.
Benim durumumda, bir yükseltme prosedürünün parçası olarak, gigabaytlarca veri (çok sayıda alt dizin ve çeşitli boyutlarda dosyalar) içerebilen bir dizini taşımam (yeniden adlandırmam) gerekiyor. Taşıma her zaman aynı bölüm / sürücü içinde yapılır, bu nedenle diskteki tüm dosyaları fiziksel olarak taşımaya gerek yoktur.
Orada olmamalı Taşınacak dir içeriğine herhangi bir dosya kilitleri olabilir, ama yine de, oldukça sık, renameTo () kendi iş ve döner false başaramazsa. (Sadece Windows'ta bazı dosya kilitlerinin süresinin biraz keyfi olarak dolacağını tahmin ediyorum.)
Şu anda kopyalamayı ve silmeyi kullanan bir geri dönüş yöntemim var, ancak bu , klasörün boyutuna bağlı olarak çok zaman alabileceği için berbat . Ayrıca, potansiyel olarak saatlerce beklemekten kaçınmak için kullanıcının klasörü manuel olarak taşıyabileceği gerçeğini belgelemeyi de düşünüyorum. Ancak Doğru Yol açıkça otomatik ve hızlı bir şey olurdu.
Öyleyse sorum şu, Windows üzerinde Java ile basit JDK veya bazı harici kitaplıklar ile hızlı taşıma / yeniden adlandırma yapmak için alternatif, güvenilir bir yaklaşım biliyor musunuz ? Veya belirli bir klasör ve tüm içeriği için (muhtemelen binlerce ayrı dosya) herhangi bir dosya kilidini tespit etmenin ve serbest bırakmanın kolay bir yolunu biliyorsanız , bu da iyi olur.
Düzenleme : Bu özel durumda, sadece renameTo()
birkaç şeyi daha hesaba katarak kullanmaktan kurtulmuş gibi görünüyor ; bu cevaba bakın .