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

これは機能するはずです-作成した問題は、filenameとfileNameという2つの変数があることです。

基本的な問題は、次の行が必要なことだと確信しています。

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

実際に読む

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

具体的には、filenameに保存されている元の(変更されていない)ファイル名ではなく、(ローカルfileName内の)新しく返されたファイル名を使用して名前を変更する必要があります。

于 2012-10-19T10:07:19.283 に答える