添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹FilePhoto,当用户执行完上传操作后就把FilePhoto文件夹下所有图片删除掉,刚开始代码是这样写的:

    public static boolean DelFilePhoto() {
        String rootPathSD = Environment.getExternalStorageDirectory().getPath();
        File file = new File(rootPathSD + "/FilePhoto");
        if (file.exists()) {
            return file.delete();
        return false;

因为FilePhoto是存储在SDcard中的,所以先获取rootPathSD路径,再加文件名称来获取该文件的根路径,通过这个根路径得到FilePhoto文件夹的File对象,使用file.exists()来判断文件是否存在,存在则通过file.delete()删除它,file.delete()如果删除成功则返回true,不成功则返回false。
程序看来起来一切都很正常,调用该方法时file.delete()返回的也是true,但是文件夹就是删除不掉,这是为何?
一般调用file.delete()方法不能正常删除的原因主要如下几点:

1、当前操作的File文件正在被其它进程引用
2、File文件是个文件夹且不为空,里面含有其它文件或文件夹
3、之前使用了这个File文件的文件流,并且没有关闭此File文件的文件流

经过检查,我的问题属于第二个原因,解决思路为:获取FilePhoto文件夹中的所有文件,得到它们的路径,再一个一个的删除掉。

    public static void DelFilePhoto() {
        String rootPathSD = Environment.getExternalStorageDirectory().getPath();
        File file = new File(rootPathSD + "/FilePhoto");
        File[] files = file.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()){
                File photoFile = new File(files[i].getPath());
                Log.d("photoPath -->> ", photoFile.getPath());
                photoFile.delete();

通过File.listFiles()方法可以获得FilePhoto文件夹下所有文件和文件夹,并返回一个File[]数组,由于我这里可以确定FilePhoto文件夹下只会存在文件,没有文件夹,所以只使用files[i].isFile()进行判断,如果是文件,则通过调用getPath()方法取得该文件的绝对路径,再根据得到的绝对路径获得File对象,最后调用delete()方法删除即可。
注意不能在代码中这么写:

if (files[i].isFile()){ File photoFile = new File(files[i].getPath()); Log.d("photoPath -->> ", photoFile.getPath()); return photoFile.delete();

这样写的话执行一次就跳出循环和方法了,这样删除不了所有文件。

如果文件夹中还存在文件夹且不为空怎么办呢?可以使用files[i].isDirectory()判断一下文件是否为文件夹,是文件夹的话则再通过同样的方法把里面的文件遍历一遍删除掉。

项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹FilePhoto,当用户执行完上传操作后就把FilePhoto文件夹下所有图片删除掉,刚开始代码是这样写的: public static boolean DelFilePhoto() { String rootPathSD = Environment.getExternalStorageDirectory 1。未及时停止文件io流。 2。准备删除文件路径不存在。 3。准备删除文件文件夹文件夹内存在文件(如果想要删除整个文件夹的话,必须先挨个删除文件夹里面的内容) 如果是2,3的话,可以使用以下的代码进行删除。 private boolean deleteFiles(File file){ if(file.isDirectory()){ //判断是否是文件夹 File[] files InputStream ins = file.getInputStream(); //zip放在临时目录,重命名为 rc-oss前缀,.zip结尾的文件,示例 :rc-oss5195741985659908476.zip File tempZip = File.createTempFile(OssConstant.APP_BIZ, OssConstant.ZIPFILE_SUFFIX); FileUtil.writeFro
file.delete()删除文件删不掉,查阅网上的资料,说是有文件流没有关闭,导致文件被占用,无法删除,但是检查并未发现存在未关闭文件流。 后在网上看到一种解决方式 public static boolean deleteFile(String path){ boolean result = false; File file=new File(path);
android file.delete() 方法用于删除指定路径下的文件或空文件夹。如果指定的路径不存在或是一个非空文件夹,则该方法会返回 false,表示删除失败。该方法的语法如下: public boolean delete () 其,返回值为布尔类型,表示删除是否成功。 示例代码: ```java File file = new File("path/to/file"); if (file.delete()) { System.out.println("文件删除成功!"); } else { System.out.println("文件删除失败!"); 注意:在使用该方法时需要注意文件访问权限的问题,如果文件没有读写权限则无法删除。此外,删除操作是不可恢复的,一旦文件删除无法找回。因此,在使用该方法前应谨慎考虑。
AndroidStudio部署项目时出现错误:Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled 28757 CSDN-Ada助手: 非常感谢CSDN博主的分享,Android 跨进程通信(IPC)机制的探索与研究是一个非常实用的技术,尤其对于开发大型应用程序来说更是必不可少。我觉得下一篇博客可以探讨一下 Android 中的进程保活技术,相信对其他用户也会非常有帮助。期待你的下一篇精彩文章! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 Android Snackbar使用方法及小技巧-design 古雨寒C: 我看你的示例文字都是靠左的,那么文字如何居中呢? Android 自定义View一个控件搞定多种水波纹涟漪扩散效果 小龙surpass: github上代码跑起来和图片上的差好远 Android ListView监听滑动事件的方法 m0_54516862: fragment实现AbsListView.OnScrollListener接口 为listview添加这个监听 listview.setOnScrollListener Android 自定义View一个控件搞定多种水波纹涟漪扩散效果 wuzhuohan7788: 那个c.width = 0会出现圆圈重叠的情况,改成mRipples.get(i).width = 0就好了