0

我有一些特定于应用程序的文件存储在内部存储器的目录中。我希望用户能够通过对话框重命名这些文件。我正在使用以下代码来重命名用户选择的文件:

final File dir = context.getDir(UtilityFuctions.USER_LISTS,
                Context.MODE_PRIVATE);
        final File myFile = new File(dir, filename);

        AlertDialog.Builder fileDialog = new AlertDialog.Builder(context);
        fileDialog.setTitle("Rename file");

        // Set an EditText view to get user input
        final EditText input = new EditText(context);
        input.setText(filename);
        fileDialog.setView(input);
        fileDialog.setPositiveButton("Ok",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        String fileName = input.getText().toString();

                            myFile.renameTo(new File(dir,filename));
                            UtilityFuctions.createToast(context, "file rename successfully", 0);
                        }
                    }
                });
        fileDialog.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        // Canceled.
                        dialog.dismiss();
                    }
                });
        fileDialog.create();
        fileDialog.show();

但是上面的代码不起作用并且文件没有获得新名称。我猜renameTo对此不起作用,它只适用于外部存储器。我有一个解决方案,我可以用新名称复制现有文件并删除旧文件,但这会消耗资源,我不想这样做。如果我做错了什么,请帮助我..

4

1 回答 1

2

这应该有效 - 您创建的问题是您有两个变量,称为文件名和文件名。

我很确定基本问题是你想要这条线:

myFile.renameTo(new File(dir,filename));

实际阅读

myFile.renameTo(new File(dir,fileName));

具体来说,您想使用新返回的文件名(在本地文件名中)进行重命名,而不是存储在文件名中的原始(未更改)文件名。

于 2012-10-19T10:07:19.283 回答