如何在Android应用程序中更改SD卡上的文件名?

16
在我的Android应用程序中,我想在运行时重命名文件名。我该怎么做?
这是我的代码:
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();
}

我也使用了renameTo(File f)方法,但它没有起作用。


访问这个链接 - Jaffar Raza
1
如果你想得到别人的帮助,你需要接受答案。顺便说一下。 - Maveňツ
4个回答

89
我建议使用 File.renameTo(),而不是运行mv命令,因为我相当确定后者不受支持。
你是否已经给你的应用程序写SD卡的权限
您可以通过将以下内容添加到您的AndroidManifest.xml来实现:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

如果在添加权限后仍然无法工作,请检查设备日志,查看您尝试重命名文件时是否有错误(无论是使用adb命令还是在Eclipse的logcat视图中)。

访问SD卡时,应该避免硬编码路径,而是使用Environment.getExternalStorageDirectory()方法获取目录。

下面的代码适用于我:

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

如果你想检查进程,可以这样做:

boolean renamed = from.renameTo(to);

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

现在我尝试使用以下代码:File f1 = new File("/sdcard/sun moon.jpg"); File f2 = new File("/sdcard/soon_moon.jpg"); try { f1.renameTo(f2); } catch (Exception e) { Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); }并在androidManifest.xml文件中添加以下权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 但是仍然没有任何变化。 - Addy
我已经更新了我的答案,并提供了适用于我的代码。当您运行renameTo()时,它会返回truefalse?如果它返回false,那么f1.exists()会返回什么? - David Webb

5
您也可以明确给出完整路径而不指定目录...
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

我尝试添加权限。虽然没有成功,但是添加File1.setWritable(true);使我能够重命名文件。

以下是我的代码片段:

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");

0
public void selectFile() {
    AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this);
    pictureDialog.setTitle("Select Action");
    String[] pictureDialogItems = {
            "Select file from internal storage"};
    pictureDialog.setItems(pictureDialogItems,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case 0:
                            choosePhotoFromGallary();
                            break;
                    }
                }
            });
    pictureDialog.show();
}
public void choosePhotoFromGallary() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(galleryIntent, GALLERY);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == GALLERY) {
        if (data != null) {
            Uri contentURI = data.getData();
            File dir = Environment.getExternalStorageDirectory();
            if(dir.exists()){
                File from = new File(dir, String.valueOf(GALLERY));
                File to = new File(dir,"filerename.txt");
                if(from.exists())
                    from.renameTo(to);
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接