2011-07-04 18 views
9
// File (or directory) to be moved 
File file = new File("filename"); 

// Destination directory 
File dir = new File("directoryname"); 

// Move file to new directory 
boolean success = file.renameTo(new File(dir, file.getName())); 
if (!success) { 
    // File was not successfully moved 
    //can it be because file with file name already exists in destination? 
} 

Nếu tệp có tên 'tên tệp' đã tồn tại ở đích thì tệp sẽ được thay thế bằng tên mới?có thể tệp.renameĐể thay thế tệp hiện có?

+4

Bạn đã kiểm tra điều này chưa? – wjans

+2

Tại sao bạn không thử nghiệm và tìm hiểu? Bạn có muốn biết liệu hành vi có khác nhau trên các môi trường khác nhau không? – aldrin

+0

@wjans @aldrin Tất nhiên anh ta có thể kiểm tra điều này. Nhưng tôi cho một người thích tài liệu kết hợp với các bài kiểm tra –

Trả lời

10

Theo Javadoc:

Nhiều khía cạnh của hành vi của phương pháp này vốn dĩ nền tảng phụ thuộc vào: Thao tác đổi tên có thể không có khả năng di chuyển một tập tin từ một hệ thống tập tin khác, nó có thể không là nguyên tử và nó có thể không thành công nếu một tệp có tên đường dẫn trừu tượng đích đã tồn tại. Giá trị trả về phải luôn được kiểm tra để đảm bảo rằng thao tác đổi tên đã thành công.

+1

sry, tôi thấy bây giờ các trích dẫn của Javadoc này đã được đăng ở đây .... – mnicky

2

Từ Javadoc:

Thao tác đổi tên có thể không để di chuyển một tập tin từ một hệ thống tập tin để khác, nó có thể không phải nguyên tử, và nó có thể không thành công nếu một tập tin với sự tên đường dẫn trừu tượng đích đã tồn tại.

Tôi đã thử nghiệm đoạn mã sau:

Nó hoạt động lần đầu tiên, lần thứ hai nó không thành công như mong đợi. Để di chuyển một tệp, bạn nên xóa hoặc đổi tên đích nếu cần.

public class Test { 
    public static void main(String[] args) throws IOException { 
     File file = new File("c:\\filename"); 
     file.createNewFile(); 
     File dir = new File("c:\\temp"); 
     boolean success = file.renameTo(new File(dir, file.getName())); 
     if (!success) { 
      System.err.println("succ:" + success); 
     } 
    } 
} 
0

Vì nó là hệ thống phụ thuộc bạn không nên mong đợi nó cư xử này hay cách khác. Kiểm tra nó và thực hiện logic của riêng bạn.

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