0

因此,在我使用 MediaRecorder 录制内容并将其放在 android 设备中的某个位置之后。然后如何重命名该文件?这是我最接近解决方案的方法。单击按钮后,什么也没有发生。

public void nameAlert() {
    AlertDialog.Builder nameAlert = new AlertDialog.Builder(this);
    nameAlert.setMessage("Name of your recorded file:");
    final EditText input = new EditText(this);
    nameAlert.setView(input);

    nameAlert.setPositiveButton("Enter", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            newFileName = input.getText();
            String currentFileName = externalStoragePath;
            currentFileName = currentFileName.substring(1);
            Log.i(storagePath, currentFileName);

            File directory = new File (externalStoragePath);
            File from = new File (directory, currentFileName);
            File to = new File (directory, newFileName + ".mp3");
            from.renameTo(to);
        }
    });
    nameAlert.show();

此外,这可能是相关的。

externalStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();

日志:

08-02 02:04:03.623: I/(14043): storage/emulated/0
4

3 回答 3

0

首先检查文件是否存在:如果它仍然不起作用,则必须手动完成

    if(to.exists()) throw new java.IOException("file exists");
    if (from.renameTo(to)) {
        //success
    }else{
        to.createNewFile();
        FileChannel FCfrom = null;
        FileChannel FCto = null;
        try {
            FCfrom = new FileInputStream(from).getChannel();
            FCto = new FileOutputStream(to).getChannel();
            long count = 0;
            long size = source.size();              
            while((count += destination.transferFrom(source, count, size-count))<size);
        }finally {
            if(FCto != null){
                FCto.close();
                FCfrom.close();
                from.delete();
        }
    }
于 2013-08-02T13:13:07.493 回答
0

我想到了!问题出在这一行:

File directory = new File (externalStoragePath);

我把它改成这样:

File directory = new File (externalStoragePath + File.separator + "/Android/data/com.whizzappseasyvoicenotepad/");

因为 externalStoragePath 返回整个路径(包括文件名)

于 2013-08-02T13:22:03.183 回答
0

根据文件参考。许多失败是可能的。一些更可能的失败包括:

  1. 同时包含源路径和目标路径的目录需要写权限。
  2. 两条路径的所有父级都需要搜索权限。
  3. 两条路径都在同一个挂载点上。在 Android 上,应用程序在尝试在内部存储和 SD 卡之间进行复制时最有可能遇到此限制。请注意,此方法在失败时不会抛出 IOException。调用者必须检查返回值。

你能一一检查吗?我想你可以找出发生了什么。

于 2013-08-02T01:31:28.870 回答