SORU
16 HAZİRAN 2009, Salı


Güvenilir Bir Dosya.() renameTo Windows üzerinde alternatif?

Java File.renameTo() sorunlu, özellikle Windows, öyle görünüyor. API documentation dediği gibi

Bu davranış birçok açıdan yöntem doğasında vardır platform bağımlı: Yeniden Adlandır operasyon bir hareket yapmak mümkün olmayabilir başka bir dosya sistemi, dosya, atom olmayabilir, ve olabilir değil bir dosya başarılı hedef yol zaten soyut var. Dönüş değeri olmalı her zaman emin olmak için kontrol edilmesi, yeniden adlandırma işlemi başarılı oldu.

Yükseltme bir prosedürün bir parçası olarak benim durumda, (yeniden adlandır) veri gigabayt (farklı boyutlarda alt dizinleri ve dosyaları çok) içeren bir dizini taşımak için ihtiyacım var. Hareket her zaman fiziksel olarak disk üzerindeki tüm dosyaları taşımak için gerçek bir ihtiyaç var bu yüzden aynı bölümü/sürücü içinde yapılır.

Yokolmamalıherhangi bir dosya dizin içeriğini taşınacak kilitler, ama yine de, sık sık, renameTo() işini ve false yapmak için başarısız. (Sadece belki bazı dosya kilitleri gelişigüzel Windows sona tahmin ediyorum.)

Şu anda kopyalama & silme kullanan bir geri dönüş yöntemi var, ama bu kadar sürebilir, çünkü gerçekten berbatbir sürüzaman, klasörün boyutuna bağlı olarak. Ayrıca sadece kullanıcı klasörü el ile saatlerce bekleyen önlemek için, potansiyel olarak hareket edebileceği gerçeğini belgeleyen düşünüyorum. Ama Doğru Yol besbelli bir şey otomatik ve hızlı olacaktır.

Yani sorum şuhızlı bir hamle yapmak için alternatif ve güvenilir bir yaklaşım olduğunu/Windows, Java ile yeniden adlandırınya da düz olduğunu GÖRDÜM ya da bazı harici kütüphane ile. Ya da eğer biliyorsanızkolayyol ve belirli bir klasör için herhangi bir dosya tespit kilitleri serbest bırakmak içintüm içeriğini(muhtemelen tek tek binlerce dosya), çok iyi olurdu.


EditBu durumda, hemen dikkate birkaç şey daha alarak renameTo() kullanarak; this answer bakın var gibi görünüyor.

CEVAP
27 Mart 2011, Pazar


Yapışkan notlar 7 Files.move() de yöntemine bakın.

Bir örnek:

String fileName = "MyFile.txt";

try {
    Files.move(new File(fileName).toPath(), new File(fileName).toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING);
} catch (IOException ex) {
    Logger.getLogger(SomeClass.class.getName()).log(Level.SEVERE, null, ex);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ExcelIsFun

    ExcelIsFun

    16 ŞUBAT 2008
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011