2012-04-01 27 views
6

Tôi đang cố gắng thêm phần mở rộng vào tên tập tin được chọn bởi JFileChooser mặc dù tôi không thể làm cho nó hoạt động.Đổi tên tập tinĐể không hoạt động

Đây là mã:

final JFileChooser fc = new JFileChooser(); 
     fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     int returnVal = fc.showSaveDialog(null); 
     if (returnVal == JFileChooser.APPROVE_OPTION) { 
      File f = fc.getSelectedFile(); 
      String name =f.getAbsoluteFile()+".txt"; 
      f.renameTo(new File(name)); 
      FileWriter fstream; 
      try { 
       fstream = new FileWriter(f); 
       BufferedWriter out = new BufferedWriter(fstream); 
       out.write("test one"); 
       out.close(); 
      } catch (IOException ex) { 
       Logger.getLogger(AppCore.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 

Tôi không thể hiểu tại sao điều này không hoạt động. Tôi cũng đã thử sử dụng getPath() và getCanonicalPath() nhưng kết quả là như nhau. Tệp được tạo tại thư mục được chọn, mặc dù không có phần mở rộng ".txt".

+1

có bạn kiểm tra kết quả từ 'renameTo 'Đây là từ tài liệu Java" Có hay không phương pháp này có thể di chuyển một tập tin từ một hệ thống tập tin này sang hệ thống tập tin khác phụ thuộc vào nền tảng. Giá trị trả về luôn luôn được kiểm tra để đảm bảo rằng hoạt động đổi tên thành công. " – twain249

+0

Thời gian duy nhất nó hoạt động là khi tôi đặt tên tệp mới theo cách thủ công nhưng không bao gồm đường dẫn: "test.txt" .Tạo một txt chứa "test one" nhưng không có trong thư mục đã chọn – Giannis

+0

Bạn có chắc chắn mục tiêu không tệp chưa tồn tại? –

Trả lời

2

Dường như với tôi rằng tất cả những gì bạn muốn làm là thay đổi tên của tệp đã chọn, thay vì đổi tên tệp trên hệ thống tệp. Trong trường hợp đó, bạn không sử dụng File.renameTo. Bạn chỉ cần thay đổi File. Một số nội dung như sau sẽ hoạt động:

 File f = fc.getSelectedFile(); 
     String name = f.getAbsoluteFile()+".txt"; 
     f = new File(name); 

File.renameTo cố gắng đổi tên tệp trên hệ thống tệp. Ví dụ:

File oldFile = new File("test1.txt"); 
File newFile = new File("test2.txt"); 
boolean success = oldFile.renameTo(newFile); // renames test1.txt to test2.txt 

Sau ba dòng, success sẽ true nếu file test1.txt có thể được đổi tên thành test2.txt, và false nếu đổi tên đã không thành công (ví dụ test1.txt không tồn tại, mở cửa trong quá trình khác, sự cho phép đã bị từ chối, vv)

Tôi sẽ nguy hiểm đoán rằng việc đổi tên bạn đang cố không thành công vì bạn đang cố gắng đổi tên một thư mục (bạn đang sử dụng JFileChooser với tùy chọn DIRECTORIES_ONLY). Nếu bạn có các chương trình sử dụng các tệp trong thư mục này, hoặc một Dấu nhắc Lệnh mở bên trong nó, chúng sẽ phản đối thư mục này đang được đổi tên.

+0

Có bạn đúng Tôi đã kết thúc việc tạo một Tệp mới bằng tên (thư mục) từ Trình chọn. Tôi chỉ nghĩ rằng renameTo là một hoạt động có thể được sử dụng trong trường hợp này. – Giannis

+0

Trong trường hợp của tôi, BufferedReader đã được mở. Vì lý do này, không thể đổi tên tệp. – ELD

0

Bạn đang ghi sai tệp. Khi bạn gọi renameTo, tệp hiện tại không thay đổi đường dẫn của nó. Hãy thử điều này:

final JFileChooser fc = new JFileChooser(); 
    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    int returnVal = fc.showSaveDialog(null); 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 
     File f = fc.getSelectedFile(); 
     String name =f.getAbsoluteFile()+".txt"; 
     File f2 = new File(name); 
     f.renameTo(f2); 
     FileWriter fstream; 
     try { 
      fstream = new FileWriter(f2); 
      BufferedWriter out = new BufferedWriter(fstream); 
      out.write("test one"); 
      out.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(AppCore.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
+0

Điều này không thực sự sử dụng phương thức renameTo. Mặc dù nó hoạt động. – Giannis

1

Bạn cũng có thể sử dụng tiện ích Files.move từ thư viện Google Guava để đổi tên tệp. Dễ dàng hơn là viết phương pháp của riêng bạn.

Từ các tài liệu:

Di chuyển các tập tin từ một con đường khác. Phương thức này có thể đổi tên một tệp hoặc di chuyển nó sang một thư mục khác, như lệnh mv Unix.

0

Nếu bạn muốn đổi tên các tập tin sau đó là phải để đóng tất cả các đối tượng (như FileReader, FileWriter, FIS, FOSmeans đóng các đối tượng tập tin đọc và sau đó đổi tên nó

+0

Mặc dù đây có thể là một gợi ý có giá trị để giải quyết vấn đề, câu trả lời thực sự cần chi tiết hơn một chút so với điều này. Vui lòng [chỉnh sửa] để cung cấp mã mẫu để hiển thị ý của bạn. Hoặc, thay vào đó, hãy xem xét viết bài này làm nhận xét. –

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