Java File.renameTo()
bermasalah, terutama pada Windows, tampaknya. Seperti yang dikatakan dalam dokumentasi API ,
Banyak aspek perilaku metode ini secara inheren bergantung pada platform: Operasi penggantian nama mungkin tidak dapat memindahkan file dari satu sistem file ke sistem file lainnya, mungkin tidak bersifat atomik, dan mungkin tidak berhasil jika file dengan nama jalur abstrak tujuan sudah ada. Nilai yang dikembalikan harus selalu diperiksa untuk memastikan bahwa operasi penggantian nama berhasil.
Dalam kasus saya, sebagai bagian dari prosedur peningkatan, saya perlu memindahkan (mengganti nama) direktori yang mungkin berisi gigabyte data (banyak subdirektori dan file dengan berbagai ukuran). Pemindahan selalu dilakukan dalam partisi / drive yang sama, jadi tidak perlu memindahkan semua file secara fisik ke disk.
Ada seharusnya tidak menjadi file kunci untuk isi dir yang akan dipindahkan, tapi masih, cukup sering, renameTo () gagal untuk melakukan pekerjaan dan kembali nya palsu. (Saya hanya menebak bahwa mungkin beberapa kunci file kedaluwarsa agak sewenang-wenang di Windows.)
Saat ini saya memiliki metode fallback yang menggunakan penyalinan & penghapusan, tetapi ini menyebalkan karena mungkin membutuhkan banyak waktu, tergantung pada ukuran folder. Saya juga mempertimbangkan untuk mendokumentasikan fakta bahwa pengguna dapat memindahkan folder secara manual untuk menghindari menunggu berjam-jam, berpotensi. Tetapi Jalan yang Benar jelas akan menjadi sesuatu yang otomatis dan cepat.
Jadi pertanyaan saya adalah, apakah Anda tahu alternatif, pendekatan yang andal untuk melakukan perpindahan cepat / mengganti nama dengan Java di Windows , baik dengan JDK biasa atau beberapa perpustakaan eksternal. Atau jika Anda tahu cara mudah untuk mendeteksi dan melepaskan kunci file apa pun untuk folder tertentu dan semua isinya (mungkin ribuan file individual), itu juga bagus.
Sunting : Dalam kasus khusus ini, tampaknya kami lolos hanya renameTo()
dengan mempertimbangkan beberapa hal lagi; lihat jawaban ini .