`

File批量操作

阅读更多
/** 
 * @Title: DeleteFile.java 
 * @Description: 文件、文件夹操作类 
 * @author MZH 
 * @version 1.0  一般自己的工具辅助类,我个人习惯加版本号,得考虑到后期维护,方便标记 
 */ 
public class FileUtils{ 
 
     
    /** 
     * 一般情况下,小马希望大家养成好习惯,构造方法,一般留个空的,方便扩展 
     */ 
    public FileUtils(){ 
         
    } 
     
     
    /** 
     * 删除文件 
     * @param file 
     * @return 
     */ 
    public boolean deleteFile(File file) { 
        boolean result = false; 
        if (file != null) { 
            try { 
                File file2 = file; 
                file2.delete(); 
                result = true; 
            } catch (Exception e) { 
                e.printStackTrace(); 
                result = false; 
            } 
        } 
        return result; 
    } 
 
    /** 
     *  删除文件夹 
     * @param folder   
     * @return 
     * 因为涉及到一个文件夹下有文件也有文件夹的情况,所以写个函数,以后直拿来用 
     */ 
    public boolean deleteFolder(File folder) { 
        boolean result = false; 
        try { 
            //取得文件下所有信息:包括文件及文件夹名称 
            String childs[] = folder.list(); 
            //小马的错误:是字符串数组,没习惯判断length大小,希望朋友们不要忘了判断长度,养成好的习惯 
            if (childs == null || childs.length <= 0) {   
                if (folder.delete()) { 
                    result = true; 
                } 
            } else { 
                for (int i = 0; i < childs.length; i++) { 
                    String childName = childs[i]; 
                    String childPath = folder.getPath() + File.separator 
                            + childName; 
                    File filePath = new File(childPath); 
                     //小马的错误:只判断是否存在,未判断是文件还是文件夹,这样会漏掉一大
                     //部分文件的操作,所以isFile一定要加 
                    if (filePath.exists() && filePath.isFile()) {
                        if (filePath.delete()) { 
                            result = true; 
                        } else { 
                            result = false; 
                            break; 
                        } 
                        //如果是文件夹的操作,此及写递归删除,调用自己 
                    } else if (filePath.exists() && filePath.isDirectory()) { 
                        if (deleteFolder(filePath)) { 
                            result = true; 
                        } else { 
                            result = false; 
                            break; 
                        } 
                    } 
                } 
                folder.delete(); 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
            result = false; 
        } 
        return result; 
    } 
 
    /** 
     * 实现清空所有Temp文件 
     *  
     * @return 是否删除成功 
     */ 
    private boolean deleteTempFiles() { 
        //ApplicationData myApp = new ApplicationData();   
        //这一步是小马犯的错误,因为继承Application的类是可以这样new对象,
         //但不建议直接new,多分内存,而且还是全局的,浪费 
         
        //此处直接写getApplication会报错,因为需要上下文件,
         //所以这时小马说的扩展构造方法就有用了,可以在new本类对象时会了Context对象哦,吼吼 
        //ApplicationData myApp = (ApplicationData)getApplication(); 
         
        FileUtils df = new FileUtils(); 
        File file = null; 
        if (Environment.getExternalStorageState().equals( 
                Environment.MEDIA_MOUNTED)) { 
            //因为类似临时文件,一般都在最开始创建,最后删除,
             //所以小马把建议类似操作放在Application里面操作,取值操作都方便 
            file = new File(TEMP); //TEMP为临时文件存放的文件夹路径 
        } 
        return df.deleteFolder(file); 
    } 
 
     
    /** 
     * 保存时将临时文件夹下所有文件移至目标文件夹下 
     * @param oldLocation  源文件夹 
     * @param newLocation  目标文件夹 
     * @throws IOException  异常 
     * @throws NoSpaceIOException  磁盘空间不足 小马自定义的异常类,可以跳过 
     */ 
    public void moveFile(File oldLocation, File newLocation) 
            throws IOException, NoSpaceIOException { 
        boolean isMkdirs = false; 
        File file = new File(newLocation.getPath()+File.separator+"此处拼接文件名"); 
        if(!file.exists()){ 
            isMkdirs = file.mkdirs(); 
            if(isMkdirs){ 
                String childs[] = oldLocation.list(); 
                if(oldLocation != null && oldLocation.exists()){ 
                    for(int i=0;i<childs.length;i++){ 
                        String childName = childs[i]; 
                        String childPath = oldLocation.getPath()+File.separator+childName; 
                        File filePath = new File(childPath); 
                        if(filePath.exists() && filePath.isFile()){ 
                            FileInputStream fis = null; 
                            FileOutputStream fos = null; 
                            try { 
                                fis = new FileInputStream(filePath); 
                                //下面这句中的false是用来判断是否是append追加状态,
                                //不懂的朋友们可以直接访问:http://developer.android.com/reference/java/io/File.html 
                                //来查看相关方法参数的具体涵义,吼吼 
                                fos = new FileOutputStream(new File(file.getPath()+File.separator+childName),false); 
                                 
                                byte[] buff = new byte[8192]; 
                                int readIn ; 
                                //此处注意下:read方法中的参数如果不写的话,会读不到文件内容,
                                //报异常,小马犯过的低级错误,希望你不要犯啦 
                                while((readIn = fis.read(buff,0,buff.length))!= -1){ 
                                    fos.write(buff,0,readIn); 
                                } 
                                fos.flush(); 
                            } catch (Exception e) { 
                                e.printStackTrace(); 
                                /*if (android.os.Environment.getExternalStorageState().equals( 
                                        android.os.Environment.MEDIA_MOUNTED)) { 
                                    // 如果有sdcard,磁盘空间是否满了 
                                    Log.d(TAG, "DMUtils>>>sdcard is ok!"); 
                                    // No space left on device 
                                    if (ex.getMessage() != null 
                                            && ex.getMessage().indexOf( 
                                                    "No space left on device") != -1) { 
                                        // 磁盘空间满 
                                        throw new NoSpaceIOException(ex.getMessage()); 
                                    } 
                                } else { 
                                    // 文件保存失败应该检查sd卡 
                                    Log.d(TAG, "DMUtils>>>sdcard is error!state: " 
                                            + android.os.Environment.getExternalStorageState()); 
                                } 
                                throw new IOException(ex.getMessage() 
                                        + " IOException when transferring " 
                                        + oldLocation.getPath() + " to " 
                                        + newLocation.getPath());*/ 
                            }finally{ 
                                //大伙应该很熟悉了吧?小马一朋友犯过的错误,未关闭流,
                                //导致生成的文件本来是KB的却成了MB的文件,所以一定注意打开什么就关闭什么 
                                try { 
                                    if(fis!=null){ 
                                        fos.close(); 
                                    } 
                                    if(fos!=null){ 
                                        fos.close(); 
                                    } 
                                } catch (Exception e2) { 
                                    e2.printStackTrace(); 
                                } 
                            } 
                        } 
                        /* 
                         * 因为此处小马用的是一个文件夹下的文件操作,并不包含子文件夹,
                         * 所以:如果有朋友要用子文件夹操作的话可激活此处递归处理哦 
                         */ 
                        /*else if(filePath.exists() && filePath.isDirectory()){ 
                            try { 
                                moveFile(filePath,new File("此处路径从全局文件中取就OK了")); 
                            } catch (Exception e) { 
                                e.printStackTrace(); 
                            } 
                        }*/ 
                    } 
                }    
            } 
        } 
    } 
     
} 
分享到:
评论

相关推荐

    单file控件批量上传文件

    传统的文件上传方式通常限制用户只能选择一个文件,而“单file控件批量上传文件”技术则解决了这一问题,使得用户可以通过一个简单的file输入框一次性选择并上传多个文件。这种功能在社交媒体、电子商务、文档共享等...

    FileSearch批量改名

    - **备份重要文件**:尽管工具通常设计得相对安全,但任何批量操作都有潜在风险。在对重要文件进行批量改名之前,最好先备份。 - **理解规则**:在设置改名规则时,确保你清楚每一步的含义,避免因误解规则而导致...

    C# 图片批量操作代码

    压缩包中的"图片批量操作.aspx"和"图片批量操作.aspx.cs"可能是ASP.NET Web应用程序的源代码,它们可能实现了Web界面和后台处理逻辑,让用户可以通过网页进行图片的批量操作。在ASP.NET中,通常使用...

    77盘批量下载工具

    此时,"77盘批量下载工具"便显得尤为重要,它能够帮助用户高效、快速地批量下载77网盘中的文件,省去了手动操作的繁琐步骤,尤其对于需要处理大量文件的用户来说,这无疑是一个极其实用的工具。 首先,让我们深入...

    文件批量改名-FileSearch-真实有效

    标题"文件批量改名-FileSearch-真实有效"以及描述"文件批量改名-FileSearch"提示我们,这个话题主要围绕着一个名为"FileSearch"的工具,它提供了批量更改文件名的功能,并且这个功能是真实有效的。 批量文件改名...

    pyqt5实现文件批量操作

    在本文中,我们将深入探讨如何使用PyQt5这个强大的Python GUI库来实现文件批量操作,包括根据Excel首列内容创建文件夹以及将指定文件复制到多个文件夹并进行重命名。PyQt5是Qt库的一个Python绑定,它提供了丰富的...

    matlab批量图片操作

    在MATLAB中进行批量图片操作是一项常见的任务,尤其在图像处理和分析中。这个主题涵盖了如何使用MATLAB高效地打开、处理和存储大量的图像文件。下面将详细介绍这些关键知识点。 一、批量读入图片 MATLAB提供了...

    爱立信lte OSS批量操作详解

    ### 爱立信LTE OSS批量操作详解 #### 一、MObatch语句参数解释与应用场景 在爱立信的LTE OSS(运营支持系统)中,为了提高工作效率,经常需要用到批量操作工具来处理大量的网络元素(NE)。其中,`mobatch`是一个...

    文件批量操作.rar 源代码C#

    在IT行业中,文件批量操作是一项常见的任务,尤其是在自动化和脚本编写中。在这个"文件批量操作.rar 源代码C#"的压缩包中,我们很可能找到了一个使用C#编程语言实现的解决方案。C#是一种面向对象的、现代的编程语言...

    File_Batch_Processing.rar_batch_批量读取_批量读取文件

    批量读取文件是一种有效的方法,能够显著提高工作效率,避免手动操作的繁琐。本文将深入探讨批量读取文件的概念、方法以及如何实现这一功能。 批量读取文件的核心在于程序能够遍历指定目录及其子目录下的所有文件,...

    PFCG批量添加T-code利用Import from file(1)

    这种操作对于那些需要定期调整或统一菜单布局的组织特别有帮助,可以避免手动逐个添加事务码的繁琐工作。 要上传菜单,需要一个特定格式的文件。根据SAP Note 389675,菜单被保存为一个父-子层级结构,每个节点由...

    Jquery+php fileread html5 拖拽批量上传图片

    在现代Web开发中,用户对...总之,结合HTML5的File API、jQuery的事件处理和PHP的文件操作,我们可以构建出一个高效、友好的拖拽批量上传图片系统。但在实际应用中,要时刻关注性能和安全性,以提供最佳的用户体验。

    群晖FileManager管理工具

    8. **批量操作**:用户可以批量处理文件,如批量重命名、移动或删除,提高工作效率。 9. **搜索功能**:内置强大的搜索工具,帮助用户快速找到所需文件。 10. **网络驱动器映射**:用户还可以将群晖NAS作为一个...

    neo4j批量数据导入

    首先,批量数据导入涉及到的主要概念是Cypher语句,这是Neo4j用于操作数据的SQL-like语言。批量导入时,可以编写Cypher脚本一次性创建大量节点和关系。例如,如果你有一个CSV文件,你可以使用LOAD CSV语句将数据加载...

    文件批量上传 tp+layui

    为了支持批量上传,开发者需要遍历`file`方法返回的文件数组,并对每个文件执行相同的操作。 其次,Layui的文件上传组件提供了丰富的配置选项,如上传接口URL、文件类型限制、上传前的预处理、上传过程的进度显示...

    C# 对文件操作的方法(读取,删除,批量拷贝,删除

    在C#中,文件操作是常见的任务,涉及到读取、写入、删除以及批量处理文件等操作。下面将详细介绍这些知识点。 首先,读取文件是通过`System.IO`命名空间中的`StreamReader`或`FileStream`类来实现的。例如,使用`...

    php批量删除 php批量删除

    在进行批量删除操作时,还可以结合缓存管理、日志记录和错误处理等机制,以确保系统的稳定性和安全性。例如,删除操作成功后,更新相关的缓存;记录删除操作的日志,以便追踪和排查问题;设置适当的错误处理机制,...

    批量删除文件或批量修改文件名

    在IT行业中,对文件进行批量操作是常见的需求,比如批量删除文件或批量修改文件名。这些操作能够极大地提高工作效率,特别是在处理大量文件时。这里我们将详细介绍如何使用Notepad++这一强大的文本编辑器来实现这两...

    do_file_IDl_批量_移动_重命名_

    标题"do_file_IDL_批量_移动_重命名_"和描述中的关键词"IDL语言实现文件批量重命名以及批量移动"指向了两个重要的编程任务:文件的批量重命名和批量移动。这两个功能在处理大量文件时非常有用,特别是对于数据科学家...

    BAT批处理脚本-文件相关操作-rar对指定数量的文件进行批量压缩.zip

    4. **执行压缩操作**:最后,通过调用RAR命令并传入相应的参数和文件列表,脚本将执行批量压缩操作。例如,`rar a -m5 archive.rar file1.txt file2.txt`将把file1.txt和file2.txt压缩到archive.rar中。 需要注意的...

Global site tag (gtag.js) - Google Analytics