如何从 SD 卡中删除文件

我正在创建一个文件作为一个电子邮件附件发送。现在我想删除后发送的电子邮件图像。有办法删除文件吗?

我试过 myFile.delete();,但它没有删除文件。


我在 Android 上使用这段代码,所以编程语言是 Java,使用通常的 Android 方式访问 SD 卡。我正在删除 onActivityResult方法中的文件,当一个 Intent在发送电子邮件后返回到屏幕。

227071 次浏览
File file = new File(selectedFilePath);
boolean deleted = file.delete();

其中 selectedFilePath 是要删除的文件的路径-例如:

/sdcard/YourCustomDirectory/ExampleFile.mp3

此外,如果您使用 > 1.6 SDK,则必须给予许可

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

AndroidManifest.xml文件中

Android Context 有以下方法:

public abstract boolean deleteFile (String name)

我相信这将做什么,你想与正确的应用程序前提上面列出。

 public static boolean deleteDirectory(File path) {
// TODO Auto-generated method stub
if( path.exists() ) {
File[] files = path.listFiles();
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
deleteDirectory(files[i]);
}
else {
files[i].delete();
}
}
}
return(path.delete());
}

此代码将帮助您. . 在 Android 清单中,您必须获得许可才能进行修改. 。

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

递归删除文件的所有子级..。

public static void DeleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory()) {
for (File child : fileOrDirectory.listFiles()) {
DeleteRecursive(child);
}
}


fileOrDirectory.delete();
}

改用 Android 4.4 +

应用程序是 不允许写作 (删除,修改...)外部存储 除了到它们的 特定包裹目录。

正如 Android 文档所述:

”不允许应用程序写入辅助外部存储 设备,除非在包特定的目录中 合成权限”

但是 讨厌的解决办法存在 (见下面的代码)。在三星Galaxy S4上测试,但是这个修复并不适用于所有的设备。此外,我 不会指望这个解决方案在 未来版本的 Android 中可用。

有一个 解释(4.4 +)外部存储权限更改的伟大文章

你可以读 更多关于这里的工作。 解决方案源代码来自 这个网站

public class MediaFileFunctions
{
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean deleteViaContentProvider(Context context, String fullname)
{
Uri uri=getFileUri(context,fullname);


if (uri==null)
{
return false;
}


try
{
ContentResolver resolver=context.getContentResolver();


// change type to image, otherwise nothing will be deleted
ContentValues contentValues = new ContentValues();
int media_type = 1;
contentValues.put("media_type", media_type);
resolver.update(uri, contentValues, null, null);


return resolver.delete(uri, null, null) > 0;
}
catch (Throwable e)
{
return false;
}
}


@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static Uri getFileUri(Context context, String fullname)
{
// Note: check outside this class whether the OS version is >= 11
Uri uri = null;
Cursor cursor = null;
ContentResolver contentResolver = null;


try
{
contentResolver=context.getContentResolver();
if (contentResolver == null)
return null;


uri=MediaStore.Files.getContentUri("external");
String[] projection = new String[2];
projection[0] = "_id";
projection[1] = "_data";
String selection = "_data = ? ";    // this avoids SQL injection
String[] selectionParams = new String[1];
selectionParams[0] = fullname;
String sortOrder = "_id";
cursor=contentResolver.query(uri, projection, selection, selectionParams, sortOrder);


if (cursor!=null)
{
try
{
if (cursor.getCount() > 0) // file present!
{
cursor.moveToFirst();
int dataColumn=cursor.getColumnIndex("_data");
String s = cursor.getString(dataColumn);
if (!s.equals(fullname))
return null;
int idColumn = cursor.getColumnIndex("_id");
long id = cursor.getLong(idColumn);
uri= MediaStore.Files.getContentUri("external",id);
}
else // file isn't in the media database!
{
ContentValues contentValues=new ContentValues();
contentValues.put("_data",fullname);
uri = MediaStore.Files.getContentUri("external");
uri = contentResolver.insert(uri,contentValues);
}
}
catch (Throwable e)
{
uri = null;
}
finally
{
cursor.close();
}
}
}
catch (Throwable e)
{
uri=null;
}
return uri;
}
}

这对我很有用: (从画廊中删除图片)

File file = new File(photoPath);
file.delete();


context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(photoPath))));

这招对我很管用。

String myFile = "/Name Folder/File.jpg";


String my_Path = Environment.getExternalStorageDirectory()+myFile;


File f = new File(my_Path);
Boolean deleted = f.delete();

对不起: 在我的代码中有一个错误之前,因为站点验证。

String myFile = "/Name Folder/File.jpg";


String myPath = Environment.getExternalStorageDirectory()+myFile;


File f = new File(myPath);
Boolean deleted = f.delete();

我想很明显..。 首先,您必须知道您的文件位置。 其次,Environment.getExternalStorageDirectory()是获取应用程序目录的方法。 最后处理你的文件的类文件..。

我在一个运行在4.4上的应用程序上也遇到过类似的问题。

我重命名了这些文件,并在应用程序中忽略了它们。

也就是说。

File sdcard = Environment.getExternalStorageDirectory();
File from = new File(sdcard,"/ecatAgent/"+fileV);
File to = new File(sdcard,"/ecatAgent/"+"Delete");
from.renameTo(to);

试试这个。

File file = new File(FilePath);
FileUtils.deleteDirectory(file);

来自 Apache Commons

private boolean deleteFromExternalStorage(File file) {
String fileName = "/Music/";
String myPath= Environment.getExternalStorageDirectory().getAbsolutePath() + fileName;


file = new File(myPath);
System.out.println("fullPath - " + myPath);
if (file.exists() && file.canRead()) {
System.out.println(" Test - ");
file.delete();
return false; // File exists
}
System.out.println(" Test2 - ");
return true; // File not exists
}
File filedel = new File("/storage/sdcard0/Baahubali.mp3");
boolean deleted1 = filedel.delete();

或者,试试这个:

String del="/storage/sdcard0/Baahubali.mp3";
File filedel2 = new File(del);
boolean deleted1 = filedel2.delete();

您可以按以下方式删除文件:

File file = new File("your sdcard path is here which you want to delete");
file.delete();
if (file.exists()){
file.getCanonicalFile().delete();
if (file.exists()){
deleteFile(file.getName());
}
}