【问题标题】:Cannot rename the file with the android app that I created无法使用我创建的 android 应用程序重命名文件
【发布时间】:2020-12-09 10:38:55
【问题描述】:

所以我正在创建一个可以选择 pdf 文件的应用程序,并且我想使用用户将在 Edittext 中输入的输入重命名该选定文件。

这是我当前使用的代码,但是当我单击 rename_the_file 按钮时没有任何反应。 (我试图记录这个过程,但也没有运气)

sel_a_file.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_PICK)
                    .setType("application/pdf")
                    .setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select a file"), 123);
            //To avoid using the rename_button when file is not selected
            rename_file.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String new_name = new_file_name.getText().toString();
                    File f1 = new File(String.valueOf(selectedfile), String.valueOf(file_name));
                    File f2 = new File(String.valueOf(selectedfile), String.valueOf(new_name));
                    f1.renameTo(f2);
                }
            });
        }
    });

这里是 onActivityResult 和我创建的用于向文本视图显示所选文件名的方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 123 && resultCode == RESULT_OK) {
        selectedfile = data.getData(); //The uri with the location of the file
        file_name.setText(getFileName(selectedfile));
    }
}

private String getFileName(Uri selectedfile) {
    String path = selectedfile.getPath();
    String filename = path.substring(path.lastIndexOf("/") + 1);
    String file;
    if (filename.indexOf(".") > 0) {
        file = filename.substring(0, filename.lastIndexOf("."));
    } else {
        file = filename;
    }
    return file;
}

我已经尝试了以下方法来更改选定的文件名,但到目前为止没有运气:

1)

String new_name = new_file_name.getText().toString();
File f1 = new File(String.valueOf(file_name));
File f2 = new File(String.valueOf(new_name));
f1.renameTo(f2);
String new_name = new_file_name.getText().toString();
File f1 = new File(String.valueOf(selectedfile));
File f2 = new File(String.valueOf(new_name));
f1.renameTo(f2);
String new_name = new_file_name.getText().toString();
File f1 = new File(String.valueOf(selectedfile), String.valueOf(file_name));
File f2 = new File(String.valueOf(selectedfile), String.valueOf(new_name));
f1.renameTo(f2);

我确实尝试过这段代码,如果重命名发生与否,则显示吐司。

String new_name = new_file_name.getText().toString();
File new_file = new File(selectedfileDirectory, new_name);
boolean b = selectedfile.renameTo(new_file);
if(b){
    Toast.makeText(MainActivity.this, "File renamed", Toast.LENGTH_SHORT).show();
}else{
    Toast.makeText(MainActivity.this, "Nothing happened", Toast.LENGTH_SHORT).show();
}

吐司显示:什么也没发生。

【问题讨论】:

  • 你的目标和编译版本是什么?
  • 请不要在一个意图中同时使用 ACTION_PICK 和 ACTION_GET_CONTENT。令人困惑。
  • @blackapps 我不知道该用什么。我只知道 ACTION_GET_Content 带那个窗口来选择文件
  • 在重命名之前检查您的文件是否存在,并确保它不是因为范围存储相关问题。
  • 文件存在确认,因为我在尝试重命名之前先选择文件。并且由于它在我的 SD 卡中(我也尝试过内部存储)我也添加了该用户权限

标签: android android-file


【解决方案1】:

您不能将 data.getData() 用于 File 类,因为它不是文件系统路径,而是内容方案 uri。

您自己看看data.getData().toString() 是一个内容方案。

【讨论】:

  • 但是如果我将 selectedfile 与 String.valueof 一起使用,尽管它是 data.getData() 它应该可以工作?
  • 你不能将 data.getData() 与我告诉你的 File 类一起使用。但无论如何..你用 valueof 得到哪个值?与该内容方案进行比较。
  • 我得到了我选择的文件的位置
【解决方案2】:

这应该可以完成工作。

//Class variables
File selectedFile;
String selectedFileDirectory;
...
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 123 && resultCode == RESULT_OK) {
    String uriString = uri.toString();
    selectedFile = new File(uriString);
    selectedFileDirectory = selectedFile.getParent();
  }
}

然后

rename_file.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String new_name = new_file_name.getText().toString();
                File newFile = new File(selectedFileDirectory, new_name);
                selectedFile.renameTo(f2);

            }
        });

【讨论】:

  • 我确实编辑了我的代码并在其中尝试了您的代码,并为它干杯。但是吐司说什么都没发生(参考上面编辑过的代码)
  • 重命名后的新文件要写到哪里?外部存储?
猜你喜欢
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2021-06-09
  • 2020-07-14
相关资源
最近更新 更多