如何在Android 7上使用它的路径删除文件?

问题描述 投票:1回答:1

我在存储卡上有一个文件路径:/storage/7AB3-1EEF/EXTERNAL_eicar-tf.com

使用File类,我可以阅读它,但我无法删除它。

那么,如何仅使用真实路径删除文件呢?如果文件存储在/storage/0/[file]中,我的代码可以正常工作

清单中写的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

该代码完全适用于Android 4.2.2

我尝试将文件转换为URI并删除它,但我有一个“未知URL”错误消息。

Uri ur = Uri.fromFile(new File(reports.get(getAdapterPosition()).getPath()));
context.getContentResolver().delete(ur, null, null);

我按钮的代码:

button_Delete_File.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) { 
                    File file = new File(reports.get(getAdapterPosition()).getPath()); //Here comes out the described path...
                    file.delete();
                    Log.e("File deleted?", reports.get(getAdapterPosition()).getPath());
                    if (!file.exists()) {
                        Log.e("Yes", reports.get(getAdapterPosition()).getPath());
                    } else {
                        Log.e("No", reports.get(getAdapterPosition()).getPath());
                        Toast.makeText(context, context.getResources().getString(R.string.delete_file_error), Toast.LENGTH_SHORT).show();
                    }
                }
            });
java android file
1个回答
2
投票

我做的!感谢Mr. CommonsWare's关于存储访问框架的观点,我能够重新编写代码:

button_Delete_File.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) { //Remove item from list and delete assigned file.
       if (Build.VERSION.SDK_INT >= 19) {
           try {
               Uri uri = Uri.parse(reports.get(getAdapterPosition()).getPath());
               ContentResolver contentResolver = context.getContentResolver();
               contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
               DocumentsContract.deleteDocument(contentResolver, uri);
               reports.remove(getAdapterPosition());
               notifyItemRemoved(getAdapterPosition());
           } catch (FileNotFoundException e) {
               Toast.makeText(context, context.getResources().getString(R.string.delete_file_not_found), Toast.LENGTH_SHORT).show();
           }
       } else {
           File file = new File(reports.get(getAdapterPosition()).getPath());
           file.delete();
           if (!file.exists()) {
               reports.remove(getAdapterPosition());
               notifyItemRemoved(getAdapterPosition());
           } else {
               Toast.makeText(context, context.getResources().getString(R.string.delete_file_error), Toast.LENGTH_SHORT).show();
           }
       }
   }
});

现在它适用于Android 4.2.2和7.0。

© www.soinside.com 2019 - 2024. All rights reserved.