Переименовать файл в каталоге, который находится во внутренней памяти Android?

У меня есть определенный файл приложения, который хранится в каталоге во внутренней памяти. Я хочу, чтобы пользователь мог переименовывать эти файлы через диалоговое окно. Я использую следующий код для переименования выбранного файла пользователем:

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 для этого не подойдет, он будет работать только для внешней памяти. У меня есть решение, в котором я могу сделать копию существующего файла с новым именем и удалить старый файл, но это будет потреблять ресурсы, и я не хочу этого делать. Пожалуйста, помогите мне, если я делаю что-то не так.


person Anshul    schedule 19.10.2012    source источник
comment
Просто предположение; экспериментальных доказательств пока нет. Как насчет запуска команды Linux, mv oldfullpath newfullpath?   -  person full.stack.ex    schedule 19.10.2012
comment
Я вас не понял..... Я хочу сделать это в Java (Android)   -  person Anshul    schedule 19.10.2012
comment
Правильно, я имел в виду - но сам не пробовал - запуск команды Linux из приложения Android, как здесь: stackoverflow.com/questions/3350283/ .   -  person full.stack.ex    schedule 19.10.2012
comment
хорошо, но я новичок во всем этом, поэтому я хочу что-то попроще :)   -  person Anshul    schedule 19.10.2012
comment
Кстати, попробуйте проверить результат renameTo и, если false, переданные ему аргументы. Хотя все это кажется очевидным, здесь может быть тонкая ошибка.   -  person full.stack.ex    schedule 19.10.2012
comment
Он возвращает false каждый раз :(   -  person Anshul    schedule 19.10.2012


Ответы (1)


Это должно работать - проблема, которую вы создали, заключается в том, что у вас есть ДВЕ переменные с именем имя файла и имя файла.

Я почти уверен, что основная проблема заключается в том, что вам нужна эта строка:

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

на самом деле читать

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

в частности, вы хотите выполнить переименование с новым возвращенным именем файла (в локальном имени файла), а не с исходным (неизмененным) именем файла, хранящимся в имени файла.

person Elemental    schedule 19.10.2012
comment
Мы все делаем ошибки - это было очень тяжело увидеть самому - person Elemental; 19.10.2012
comment
Спасибо, чувак, что заметил эту проблему... ты спас меня - person Anshul; 19.10.2012