android,如何重命名文件?

Hes*_*sam 35 android file-rename

在我的应用程序中,我需要录制视频.在开始录制之前,我正在为其分配名称和目录.录制完成后,用户可以重命名他的文件.我写了下面的代码,但似乎不起作用.

当用户输入文件名并单击按钮时,我会这样做:

private void setFileName(String text) {     
        String currentFileName = videoURI.substring(videoURI.lastIndexOf("/"), videoURI.length());
        currentFileName = currentFileName.substring(1);
        Log.i("Current file name", currentFileName);

        File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), MEDIA_NAME);
        File from      = new File(directory, "currentFileName");
        File to        = new File(directory, text.trim() + ".mp4");
        from.renameTo(to);
        Log.i("Directory is", directory.toString());
        Log.i("Default path is", videoURI.toString());
        Log.i("From path is", from.toString());
        Log.i("To path is", to.toString());
    }
Run Code Online (Sandbox Code Playgroud)

文本:是用户输入的名称.当前文件名:是我在记录MEDIA_NAME之前分配的名称:文件夹名称

Logcat显示了这个:

05-03 11:56:37.295: I/Current file name(12866): Mania-Karaoke_20120503_115528.mp4
05-03 11:56:37.295: I/Directory is(12866): /mnt/sdcard/Movies/Mania-Karaoke
05-03 11:56:37.295: I/Default path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/Mania-Karaoke_20120503_115528.mp4
05-03 11:56:37.295: I/From path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/currentFileName
05-03 11:56:37.295: I/To path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/hesam.mp4
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激.

Nir*_*jan 48

在你的代码中:

不应该是:

File from = new File(directory, currentFileName);

代替

File from = new File(directory, "currentFileName");


为了安全起见

使用File.renameTo().但在重命名之前检查目录是否存在!

File dir = Environment.getExternalStorageDirectory();
if(dir.exists()){
    File from = new File(dir,"from.mp4");
    File to = new File(dir,"to.mp4");
     if(from.exists())
        from.renameTo(to);
}
Run Code Online (Sandbox Code Playgroud)

参考:http: //developer.android.com/reference/java/io/File.html#renameTo%28java.io.File%29

  • 我每隔几个月就会回到这个解决方案.谢谢ngen提供简洁的解决方案.<3 (5认同)

COD*_*BOY 19

问题出在这一行,

File from = new File(directory, "currentFileName");
Run Code Online (Sandbox Code Playgroud)

这里currentFileName实际上是一个你不必使用的String"

试试这种方式,

File from      = new File(directory, currentFileName  );
                                    ^               ^         //You dont need quotes
Run Code Online (Sandbox Code Playgroud)

  • @Hesam有时候这种愚蠢的错误需要我们所有的时间.. :)欢呼......快乐的编码:) (7认同)
  • 哦,我的上帝!我做了什么愚蠢的错误!!!! 谢谢亲爱的桑杰.现在,我改变它后,它工作正常. (2认同)
  • 大声笑,每个人都会犯错,但这真的很有趣,休息一下,然后在你完全充满活力之后再回来。 (2认同)

Tho*_*Vos 8

使用此方法重命名文件.该文件from将重命名为to.

private boolean rename(File from, File to) {
    return from.getParentFile().exists() && from.exists() && from.renameTo(to);
}
Run Code Online (Sandbox Code Playgroud)

示例代码:

public class MainActivity extends Activity {
    private static final String TAG = "YOUR_TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        File currentFile = new File("/sdcard/currentFile.txt");
        File newFile  new File("/sdcard/newFile.txt");

        if(rename(currentFile, newFile)){
            //Success
            Log.i(TAG, "Success");
        } else {
            //Fail
            Log.i(TAG, "Fail");
        }
    }

    private boolean rename(File from, File to) {
        return from.getParentFile().exists() && from.exists() && from.renameTo(to);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

/**
 * ReName any file
 * @param oldName
 * @param newName
 */
public static void renameFile(String oldName,String newName){
    File dir = Environment.getExternalStorageDirectory();
    if(dir.exists()){
        File from = new File(dir,oldName);
        File to = new File(dir,newName);
         if(from.exists())
            from.renameTo(to);
    }
}
Run Code Online (Sandbox Code Playgroud)