【Android】删除某目录\整个文件夹的文件

删除某目录下文件:

%title插图%num
private void deleteAllFiles(File root) {
File files[] = root.listFiles();
if (files != null)
for (File f : files) {
if (f.isDirectory()) { // 判断是否为文件夹
deleteAllFiles(f);
try {
f.delete();
} catch (Exception e) {
}
} else {
if (f.exists()) { // 判断是否存在
deleteAllFiles(f);
try {
f.delete();
} catch (Exception e) {
}
}
}
}
}
只要把传入参数设置成要删除的目录即可。

删除整个文件夹里面的文件:

 

%title插图%num
使用时记得添加操作文件的权限!

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

<uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS” />

<uses-permission android:name=”android.permission.WRITE_MEDIA_STORAGE” />
//flie:要删除的文件夹的所在位置
private void deleteFile(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
File f = files[i];
deleteFile(f);
}
file.delete();//如要保留文件夹,只删除文件,请注释这行
} else if (file.exists()) {
file.delete();
}
}

评论:
suquan629
岭南散人:代码有 bug,如果传入的是一个文件的话,那个文件不会被删除。因为没有处理单个文件的逻辑。 new File(“e:/IDA/1.txt”) 你可以传这个参数试试,当然之前你先构造好这个文件。
zhuang_1008
zhuang_1008:if (f.isDirectory()) { // 判断是否为文件夹 deleteAllFiles(f); try { f.delete(); } catch (Exception e) { } } else { if (f.exists()) { // 判断是否退出(未被使用) deleteAllFiles(f); try { f.delete(); } catch (Exception e) { } } } 如果不是目录 都可以直接删除文件了 为什么还要迭代?死循环?
Etzmico
伊茨米可回复:没错呀。 if文件夹,else文件。要不哪来的被使用…… 亲,自己试试就知道啦,要实践,不能光靠看和想~
zhuang_1008
zhuang_1008回复伊茨米可:*对死循环
zhuang_1008
zhuang_1008回复伊茨米可:哪来的文件夹,if里是文件夹,else里面就是文件了
Etzmico
伊茨米可回复:文件夹中文件夹
zhuang_1008
zhuang_1008:if (f.exists()) { // 判断是否退出(未被使用) 注释亮了
Etzmico
伊茨米可回复:算了,自己去试试吧,理论家伤不起……实践出真知。
Etzmico
伊茨米可回复:只知其一不知其二……莫非你在windows系统中删文件时没遇到“该文件正在被使用”的提示么……汗。。
zhuang_1008
zhuang_1008回复伊茨米可:你知道exists这个方法的意思是什么吗?是占用吗?这个方法是判断文件或者文件夹是否存在的.
Etzmico
伊茨米可回复:你不会以为我当成exit了吧?退出是针对文件,括号里解释了。
mingmingsuper
皓月明:很好用已经测试了,不过这种在Android 10上只适合删除private的文件
qq_44060543
LccccccI:好使,记得添加权限
qq_33346542
qq_33346542:不好使,删不掉
ZhangXuxiaoqingnian
勤奋的小狼回复:只要权限全,就没问题的

【Android】拷贝文件到另一个目录下

%title插图%num %title插图%num

PS:

拷贝assets目录下文件

InputStream is = ctx.getAssets().open(“test.apk”);

特别感谢jqj1107提的建议,写代码时要谨慎,尽可能不使用try/catch,拷贝文件时检查文件属性等参数,确保万无一失

if (!oldfile.exists()) {return ;}
if (!oldfile.isFile()) {return ;}
if (!oldfile.canRead()) {return ;}

————————————————
评论:
zisuchen
zisuchen:在settings中想拷贝文件到data/user_de/0/中的其他应用的files文件中,要怎么拷贝怎样给权限?

a17816876003
辉度:这个就是java,不能算android

u012691505
下雨天没带雨伞:所以写 int length; 是干嘛用的?

niubitianping
SkyHandCsdn回复:是的,没有flush和close,会导致文件复制损坏,楼主在误人子弟。。

u012691505
下雨天没带雨伞回复: FileOutputStream也没有关闭

ljw910_00
ljw910_00:为什么是byte[] buffer = new byte[1444]; 不是1024求解

luofeng224
luofeng224:流没有关闭,应该有finally块吧

u013633075
假装不在乎你:程序中这段代码是没有用的:bytesum+=byteread//字节数 文件大小 并且注释也错了,也不表示文件大小,inStream.read(buffer)的返回值是IO流中实际二进制串值的大小,所以……

Etzmico
伊茨米可回复:读取的文件大小,或者说复制过去的文件大小。

zgf1991
zgf1991:首先感谢,我是用了 再个我想说一点, if (!oldfile.exists()) { //文件不存在时 对于这个是闲的蛋疼这样写,还是觉得要让直接copy你代码的人废点时间瞄瞄呢? 楼上有人指出了。为何不修改一下? 嘲讽吗? copy本就是想快点
点赞
Etzmico
伊茨米可回复:感谢了
点赞
zgf1991
zgf1991回复伊茨米可: File oldfile = new File(oldPath); if (!oldfile.exists()) { //文件不存在时 InputStream inStream = new FileInputStream(oldPath); //读入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; 这个是你的代码吧。那我再说清楚一点吧,3、4楼都说了这个问题, lz,你的回复是觉得这个东西得我们用的时候自己再修改下吗? if (!oldfile.exists()) { 原文件不存在的时候,在这里复制吗?} 能不成这个! 不该去掉?你自己再去试试能用? 是你逗还是我逗呢? 对于 -> 下面还有人提到需要这句话你怎么没看到呢? 8楼的那段代码,是应该要。 我都看了,我还加了8楼的代码,你自己试试再说吧,验证有问题的话你把文章编辑下吧
Etzmico
伊茨米可回复:呵呵 下面还有人提到需要这句话你怎么没看到呢? 只能说你手头的项目对此判断没有需求,要么就是你没考虑全面,要么就是项目较简单,不需要考虑全面 文章是给所有需要的人看的,你不需要,不代表别人不需要,如果你实在觉得多余,删掉就是了,直接无视就好。
jqj1107
零下36度:
if (!oldfile.exists()) {return ;}
if (!oldfile.isFile()) {return ;}
if (!oldfile.canRead()) {return ;}
拷贝单个文件时,建议检查下原文件是否存在等属性,不要直接异常处理。
Etzmico
伊茨米可回复:学习了,谢谢。
yong7356
yong7356:学习了。。。。。。。。。。。。
icebounder
逝于寂寞:if (!oldfile.exists()) //文件不存在时 文件都不存在了,还去拷贝什么呢??一楼说的很正确的啊?楼主你的代码是复制的吧?
griefcola
griefcola回复:你写代码的时候,永远只写你预期的部分吗? 没有使用场景的情况下,楼主的代码是没有问题的
xh_jiayou
xh_jiayou:文件不存在的时候去拷贝,考个毛啊
Etzmico
伊茨米可回复:你只看得懂中文,看不懂代码么?
maggiccrystal_3
maggiccrystal_3:从 /mnt/usb/sda1/dragons/myres 下面showtest.txt , results文件 复制到 /data/Mytest 目录 在sd卡权限: 我都加了,但是还是不成功,
Etzmico
伊茨米可回复:你那个第二个目录系统目录吧?
maggiccrystal_3
maggiccrystal_3:hello,楼主,你*个方法我试了,不能拷贝成功
Etzmico
伊茨米可回复:纳尼。。。from where to where.