Một chương trình mà chúng tôi đã gặp phải khi cố di chuyển tệp từ thư mục này sang thư mục khác. Sau khi gỡ lỗi nhiều, tôi đã đặt lỗi bằng cách viết một chương trình tiện ích nhỏ chỉ chuyển một tệp từ thư mục này sang thư mục khác (mã bên dưới). Nó chỉ ra rằng trong khi di chuyển các tập tin xung quanh trên hệ thống tập tin địa phương hoạt động tốt, cố gắng di chuyển một tập tin hệ thống tập tin khác không thành công.Java không di chuyển được (đổi tên) tệp khi tệp kết quả nằm trên một hệ thống tệp khác
Tại sao điều này? Câu hỏi có thể là nền tảng cụ thể - chúng tôi đang chạy Linux trên ext3, nếu điều đó quan trọng.
Và câu hỏi thứ hai; tôi có nên sử dụng cái gì khác hơn là phương pháp renameTo()
của lớp File
không? Dường như điều này chỉ hoạt động trên các hệ thống tập tin cục bộ.
thử nghiệm (chạy như root):
touch /tmp/test/afile
java FileMover /tmp/test/afile /root/
The file move was successful
touch /tmp/test/afile
java FileMover /tmp/test/afile /some_other_disk/
The file move was erroneous
Code:
import java.io.File;
public class FileMover {
public static void main(String arguments[]) throws Exception {
boolean success;
File file = new File(arguments[0]);
File destinationDir = new File(arguments[1]);
File destinationFile = new File(destinationDir,file.getName());
success = file.renameTo(destinationFile);
System.out.println("The file move was " + (success?"successful":"erroneous"));
}
}
Errr ... didnt tải câu trả lời của bạn trong khi Tôi soạn thảo của tôi :), moveFile là vị cứu tinh +1 – mprabhat
Đề xuất của bạn về Apache Commons chính xác là bước tiếp theo của tôi. Cảm ơn bạn đã trả lời thông tin thực sự trả lời cả hai câu hỏi! – oligofren
Để thêm vào câu trả lời xuất sắc đã được cung cấp ở trên, cuộc gọi hệ thống được sử dụng để đổi tên trả về EXDEV nếu oldpath và newpath không nằm trên cùng một hệ thống tệp được gắn kết. Trong thực tế chương trình như "mv" xử lý tình trạng này bằng cách làm một bản sao rõ ràng tiếp theo là xóa hoạt động. – ghostkadost