2010-01-06 41 views
8

Bỏ qua bài đăng cuối cùng của tôi, tôi đã tìm thấy nguồn gốc của vấn đề. Tôi đang sử dụngĐổi tên tệp mà không sử dụng đổi tênTo() - Java

a.renameTo(b) 

khi b không tồn tại. Lý do nó không tồn tại là vì có một liên kết tượng trưng nên nếu b là /usr/name/folder/file, thì b thực sự là /mnt/MountTest vì liên kết tượng trưng đến thư mục đó.

Vì vậy, câu hỏi đặt ra là, có cách nào khác để đổi tên tệp trong Java bằng cách sử dụng giá trị chuỗi không? Nếu không, quy trình đổi tên này có thể được thực hiện khác nhau như thế nào?

Trả lời

5

Đổi tên sẽ đổi tên nó ... nếu nó nằm trên cùng một hệ thống tệp.

Nếu đổi tênTo() không thành công, bạn sẽ cần phải sao chép nó vào vị trí mới, sau đó xóa bản gốc.

3

Vấn đề không phải là liên kết tượng trưng có liên quan; vấn đề là bạn không thể đổi tên nguyên tắc trên các hệ thống tập tin. Vấn đề meta là các hoạt động của tệp Java được thiết kế kém và không ném các ngoại lệ thích hợp và không cung cấp mã lỗi khi có lỗi nào đó không thành công!

1

Làm thế nào về:

a.renameTo(new File("/your/path/here/"); 
+0

rằng sẽ không làm việc vì các tập tin không tồn tại trong đường dẫn tập tin mới ... đổi tên được sử dụng theo cách bắt chước "mv", về cơ bản di chuyển tệp từ thư mục này sang một thư mục khác – Hristo

+1

@Hristo: Thực ra, đó chính xác là nguyên nhân khiến tôi gặp sự cố: mọi người mô tả renameTo tương đương với "mv" . mv là nhận thức của hệ thống tập tin, trong khi renameTo là không. Nếu bạn cố gắng để mv từ một đĩa/phân vùng khác, nó hoạt động như một cp và rm chuỗi, mà renameTo không. – Ken

4

Tôi nghĩ rằng bạn là điều khó hiểu. Một java.util.File không đại diện cho một tập tin trên một số hệ thống tập tin. Nó đại diện cho một đường dẫn đến một tập tin.

5

Đổi tên tệp cũng rất có vấn đề với các hệ thống tệp. Xem http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756. Các nhà bình luận của báo cáo lỗi đã đăng một số mã mẫu và cũng chỉ ra rằng bạn có thể sử dụng Process.exec. Cả Apache Commons IO và và Google Ổi có tiện ích cho an toàn di chuyển tập tin cũng như:

+1

Liên kết Apache đã chết, vui lòng cập nhật. – saikosen

Các vấn đề liên quan