【问题标题】:renameTo not working for renaming filesrenameTo 不适用于重命名文件
【发布时间】:2018-06-30 09:16:19
【问题描述】:

我正在尝试重命名我的应用程序中的图像文件。但是代码不起作用。
基本上,我希望用户单击重命名按钮,弹出一个带有 editText 的警报对话框,用户输入图像的新名称,然后选择重命名选项。这应该重命名文件,但它什么也不做。我也没有收到任何错误或异常。但警告,“File.renameTo()”的结果被忽略。
我该如何解决?

buttonRename.setOnClickListener(
                        new View.OnClickListener(){
                            public void onClick(View view){
                                AlertDialog.Builder builder2 = new AlertDialog.Builder(PhotosActivity.this);
                                builder2.setMessage("Rename File");
                                final EditText input = new EditText(PhotosActivity.this);
                                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                        LinearLayout.LayoutParams.MATCH_PARENT,
                                        LinearLayout.LayoutParams.MATCH_PARENT);
                                input.setLayoutParams(lp);
                                builder2.setView(input);
                                builder2.setPositiveButton(
                                        "Rename",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {

                                                File oldName =new File(al_images.get(int_position).getAl_imagepath().get(position));
                                                String string = input.getText().toString();
                                                boolean success = oldName.renameTo(new File(string));
                                                if(!success){
                                                    Log.v(TAG,"not renamed");
                                                }

                                            }
                                        });

                                builder2.setNegativeButton(
                                        "Cancel",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {
                                                dialog.cancel();
                                            }
                                        });

                                AlertDialog alert12 = builder2.create();
                                alert12.show();

                            }
                        }
                );

【问题讨论】:

    标签: java android android-alertdialog file-rename file-management


    【解决方案1】:

    在尝试重命名之前,您应该首先检查文件是否存在,因为:File.renameTo() 不会引发任何异常,即使调用的对象目标引用了不存在的路径。

    if (!originalFile.exists()){
       throw new RuntimeException("file " + originalFile + " should exist");
    }
    

    更好的选择是使用java.nio API 来操作文件,因为它提供与File 相同的功能等等,而且通常执行起来也更好。

    你可以写:

    Files.move(originalPath, targetPath);
    

    现在,如果 originalPath 不引用现有路径,则会引发异常。

    【讨论】:

    • 即使我这样做了,它也不会抛出任何异常,也不会工作
    • java.nio 可从 API 26 获得,我正在使用 API 15 @davidxxx
    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多