2012-08-29 28 views
8

Cách tốt nhất/dễ nhất để đổi tên tệp trong bộ nhớ trong của ứng dụng là gì? Tôi tìm thấy nó một chút lạ rằng có một phương pháp Context.deleteFile(), nhưng không có "di chuyển" hoặc "đổi tên" chức năng. Tôi có phải đi tất cả các cách thông qua lưu nội dung của tập tin, xóa nó, tạo một cái mới và sau đó sao chép nội dung vào đó? Hoặc có cách nào để sao chép tệp trên một tệp hiện có không?Đổi tên tệp trong bộ nhớ trong

Cập nhật (ngày 30 tháng tám năm 2012):

Theo giải pháp gợi ý dưới đây, mà tôi không thể bắt đầu làm việc:

  • Tôi có một tập tin gọi là shoppinglists.csv
  • Sau đó, tôi tạo một tệp mới có tên shoppinglists.tmp và sao chép nội dung từ shoppinglists.csv VÀ một số mục nhập mới vào đó. Các tập tin shoppinglist.tmp là sau đó một phiên bản mới của tập tin shoppinglists.csv
  • Sau đó, tôi xóa các tập tin shoppinglists.csv cũ
  • Sau đó, tôi cần phải đổi tên file shoppinglists.tmp để shoppinglists.csv

tôi cố gắng này:

ctx.deleteFile("shoppinglists.csv");   <--- delete the old file 
File oldfile = new File("shoppinglists.tmp"); 
File newfile = new File("shoppinglists.csv"); 
oldfile.renameTo(newfile); 

Tuy nhiên, điều này không làm việc. Sau khi deleteFile(), không có gì xảy ra nữa, và tôi còn lại với tệp shoppinglists.tmp mới.

Tôi đang thiếu gì?

NB: Không có lỗi hoặc bất kỳ điều gì trong LogCat.

+0

Kiểm tra giải pháp này http://stackoverflow.com/questions/2896733/how-to-rename-filename-in-sdcard-with-android-application –

Trả lời

0

đổi tênTO() không hoạt động trong môi trường của tôi (Eclipse Indigo, AVD với Android phiên bản 2.3). Giải pháp là bỏ qua phương thức tập tin tạm thời alltogeher, vì nó dường như không thể giải quyết trong bất kỳ khung thời gian hợp lý nào.

0

Bạn cần sử dụng phương thức renameTo() của Lớp tệp.

File testFile = new File ("test.txt"); // Assuming it is in Internal Storage 
testFile.renameTo ("newTest.txt"); 
+0

tôi không thể nhận được rằng để làm việc - vui lòng xem mô tả sự cố được cập nhật (câu hỏi). –

+0

Không ai có ý tưởng gì? Tôi đang suy nghĩ các vấn đề về quyền, nhưng đó là một chút lạ kể từ khi ứng dụng có thể xóa cả hai và tạo các tệp mới, cũng như thêm dữ liệu vào chúng. Nếu không tìm được giải pháp này, tôi sẽ phải bỏ qua tệp tạm thời và chỉ sử dụng mảng [] [] làm lưu trữ tạm thời, xóa tệp gốc, tạo tệp mới và đặt mảng [] [] nội dung vào đó. –

+0

không, tôi không nghĩ rằng vấn đề quyền của nó, tôi có thể cần phải mã và cá nhân kiểm tra các remaneTo() phương pháp. – Lucifer

5

Thay vì sử dụng hàm tạo File thô, hãy sử dụng phương thức getFileStreamPath do Context cung cấp. Tức là, hãy làm:

File oldfile = ctx.getFileStreamPath("shoppinglists.tmp"); 
File newfile = ctx.getFileStreamPath("shoppinglists.csv"); 
oldfile.renameTo(newfile); 
+0

Vấn đề có lẽ là "tệp mới" ("fred") 'đề cập đến tên liên quan đến thư mục hiện tại của chương trình, có thể là không, và chắc chắn không được bảo đảm, thư mục chứa tệp nội bộ. – JulianSymes

0

Tôi nghĩ chúng tôi không thể sử dụng phương thức File.renameTo() trong môi trường Bộ nhớ trong. Đổi tên tệp trong môi trường này, có thể làm: - Sao chép nội dung của tệp cũ sang tệp mới. - Xóa tệp cũ.

0
File file = new File("your old file/folder name"); 
File file2 = new File("your new file/folder name"); 
boolean success = file.renameTo(file2); 
Các vấn đề liên quan