0

哪一天我为这个问题而苦苦挣扎,并且已经阅读了整个互联网。我正在使用存储访问框架,但无法删除子目录中的文件。

存储卡上有一个文件夹(/storage/1B15-0D11/Data)。我正在向用户询问此文件夹的权限:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 999);

public void onActivityResult(int requestCode, int resultCode,
                         Intent resultData) {
 if (resultCode == Activity.RESULT_OK) {
    if (requestCode == 999) {
        if (resultData != null) {
            Uri treeUri=resultData.getData();
            //Log.d(TAG, "SELECT_DIR_REQUEST_CODE resultData = " + resultData);
            getContentResolver().takePersistableUriPermission(treeUri, (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION));

此文件夹的结构:

数据->数据1->数据2->file.txt

我知道 /storage/1B15-0D11/Data/Data1/Data2 路径上有一个文件(file.txt)。

但我不知道如何在不浏览所有子文件夹的情况下将其删除。

可以这样删除:

List<UriPermission> permissions = getContentResolver().getPersistedUriPermissions();
if (permissions != null && permissions.size() > 0) {
   DocumentFile dir = DocumentFile.fromTreeUri(this, permissions.get(0).getUri());
   DocumentFile dir2 = dir.findFile("Data1");
   DocumentFile dir3 = dir2.findFile("Data2");
   DocumentFile file = dir3.findFile("file.txt");
   if (file != null) {file.delete();}
}

有用。但这并不是我所需要的。

我有一个格式为“/storage/1B15-0D11/Data/Data1/Data2/file.txt”的文件路径。如何在不遍历所有子文件夹的情况下将其删除?

像这样试过。但这不起作用。事实证明不是正确的线路 URI。

DocumentFile dir = DocumentFile.fromTreeUri(this, Uri.parse("content://com.android.externalstorage.documents/tree/1B15-0D11%3AData%2FDat1%2FDat2"));
DocumentFile file = dir.findFile("text.txt"); //return null


                
4

1 回答 1

0

只需添加要删除的 findFile 就更容易了。

if (dir3.findFile("file.txt") !=
null) {
dir3.findFile("file.txt").delete();}
于 2022-02-23T01:11:17.203 回答