2010-05-24 19 views
11

Trong ứng dụng Android của tôi, tôi muốn đổi tên tên tệp khi chạy. Tôi làm nó như thế nào?Làm cách nào để đổi tên tệp trên sdcard bằng ứng dụng Android?

Đây là mã của tôi:

String[] command = {" mv", "sun moon.jpg"," sun_moon,jpg"}; 
try 
{ 
    Process process = Runtime.getRuntime().exec(command); 
} 
catch (IOException e) 
{ 
    Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); 
} 

Tôi cũng sử dụng phương pháp renameTo (File f) nhưng nó không hoạt động.

+0

trang web của [này một] [1] [1]: http://stackoverflow.com/questions/9065514/move-rename- file-in-sd-card –

+1

Bạn cần chấp nhận câu trả lời nếu bạn muốn mọi người giúp bạn, FYI – Gattsu

Trả lời

81

tôi sẽ khuyên bạn sử dụng File.renameTo() chứ không phải chạy lệnh mv, vì tôi khá chắc chắn sau này không được hỗ trợ ..

Bạn đã trao application permission to write to the SD Card của bạn?

Bạn làm điều này bằng adding the following to your AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Nếu nó không hoạt động khi được sự cho phép được bổ sung kiểm tra nhật ký thiết bị cho các lỗi khi bạn cố gắng để đổi tên tập tin (hoặc sử dụng lệnh adb hoặc trong logcat xem trong Eclipse).

Khi truy cập thẻ SD, bạn không nên mã hóa đường dẫn nhưng thay vì sử dụng phương thức the Environment.getExternalStorageDirectory() để nhận thư mục.

Các mã sau đây làm việc cho tôi:

File sdcard = Environment.getExternalStorageDirectory(); 
File from = new File(sdcard,"from.txt"); 
File to = new File(sdcard,"to.txt"); 
from.renameTo(to); 

và nếu bạn muốn kiểm tra quá trình này, bạn có thể làm như sau:

boolean renamed = from.renameTo(to); 

if (renamed) { 
    Log.d("LOG","File renamed..."); 
}else { 
    Log.d("LOG","File not renamed..."); 
} 
+0

Bây giờ tôi thử Tệp f1 = new File ("/ sdcard/sun moon.jpg"); Tệp f2 = Tệp mới ("/ sdcard/soon_moon.jpg"); \t thử { \t f1.renameTo (f2); \t} bắt (Ngoại lệ e) { \t \t Toast.makeText (this, "" + e, Toast.LENGTH_LONG) .show(); \t \t} và sử dụng phép trong AndroidManifest.xml nộp nhưng vẫn còn, không có thay đổi. – Addy

+0

Không có lỗi nào trong logcaat – Addy

+0

Tôi đã cập nhật câu trả lời của mình bằng mã hoạt động cho tôi.Liệu 'renameTo()' trả về 'true' hoặc' false' khi bạn chạy nó? Nếu nó trả về 'false', thì hàm trả về' f1.exists() 'là gì? –

5

bạn cũng có thể cung cấp cho một cách rõ ràng đường dẫn đầy đủ mà không chỉ định thư mục ...

File file = new File("Path of file which you want to rename"); 
File file2 = new File("new name for the file"); 
    boolean success = file.renameTo(file2); 
0

Tôi đã thử thêm quyền. Mặc dù nó không hoạt động, thêm File1.setWritable(true); cho phép tôi đổi tên tệp.

Dưới đây là đoạn mã của tôi:

if(from.setWritable(true)) 
    Log.d("InsertFragmentTwo ", "FileName==> Is Writable"); 
File two = new File(sdcard,""+imageCount+"."+s.substring((s.lastIndexOf(".")+1))); 
if (from.renameTo(two)) { 
    Log.d("InsertFragmentTwo ", "New FileName==> " + temp); 
    imageCount++; 
    retrofitImageUpload(temp); 
} else 
    Log.d("InsertFragmentTwo ", "File Renaming Failed"); 
Các vấn đề liên quan