近来实现的某些功能需要对文件进行批量操作,为方便以后查找阅读,作以下总结。

如需要对文件进行批量重命名、删除文件夹中的所有文件等。

例:删除指定文件夹中的所有文件:(批量删除文件是文件操作经常用到的)

先创建一个文件批量管理工具类,关键代码如下

//删除文件夹及其中内容
    public  void deleteDictionary(File fileIn) {
        if (fileIn.isFile()) {
deleteFiles.add(fileIn); //将删除的文件保存到集合中,
fileIn.delete();//如果是文件就删除
        } else {//如果是一个文件夹
            File[] files = fileIn.listFiles();
            for (File file : files) {
            deleteDictionary(file);//如果不是空文件夹则就迭代 deleteDictionary()方法
            }
fileIn.delete();//空文件夹就删除
        }
    }
//删除文件夹下的内容(不删除指定的文件夹)
    public  void deleteFiles(File FileList) {
        if (FileList.listFiles().length == 0) {//如果是空文件夹return
            return;
        } else {
            File[] files = FileList.listFiles();//获取FileList的文件列表
            for (File file : files) {//遍历
                if (file.isFile()) {
deleteFiles.add(file); //添加到删除到集合,以便显示删除记录
file.delete();//删除指定所有文件
                } else {
                   if (file.listFiles().length == 0) {
file.delete();//删除所有空的文件夹
                   } else {
                       deleteDictionary(file);//删除所有非空的文件夹
                   }}
            }
        }
}

上面代码的两个方法主要是使用递归来实现对文件的删除,其中需要注意的是使用File类对文件操作时,要注意文件的类型(是否为空的文件夹等),对不同的文件类型需要进行不同的判断以及不同的操作。

Servlet关键代码(doPost方法)

List<File> delFiles = null;
    request.setCharacterEncoding("UTF-8");
    String filePaths = request.getParameter("filePath");//获取文件路径
    FilesUtil util = new FilesUtil();
        if(filePaths!=null&&!filePaths.equals("")){
            File files = new File(filePaths);
            util.deleteFiles(files);//调用方法删除文件夹中的所有子文件
            delFiles = util.getDeleteFiles();//获取删除列表
//省略了部分代码
        }

上面代码主要是从获取文件路径,然后调用FilesUtil类的deleteFiles方法对指定文件夹进行删除,删除后,调用getDeleteFiles方法获取到删除文件列表,将该集合以及文件路径保存到域中,转发到index.jsp

index.jsp关键代码

将从Servlet传过来的集合进行遍历输出到table

<center>
<form action="${path}/FileServlet" method="post" >
<input type="hidden" name="driverPath" id="driverPath" />
<h1>删除指定文件夹中的文件</h1>
<tr height="30">
<td  colspan="2">文件夹路径:
<input type="text" name="filePath" value="<%if(filePaths!=null&&!filePaths.equals("")){out.println(filePaths);} %>"/>
<input type="submit"  value="删除"/>
</td></tr><tr >
<td align="left" colspan="2">
<p>删除记录</p>
<textarea rows="6" cols="50"><%
                   if(delFiles!=null&&delFiles.size()>0){
                       for(File file:delFiles){
                           out.println(file.getAbsolutePath());
                       }
                   }
%></textarea>
</td>   </tr></table></form></center>

结果:

java批量保存数据 java如何实现批量删除_文件路径

:在指定目录下搜索文件(类似文件管理器的文件搜索,在指定文件路径搜索指定类型的文件)

index.jsp关键代码 主要是将传过来的结果files集合遍历输出

<form action="${path}/FileDemoServlet" method="post" id="form1">
<input type="hidden" name="typeString" id="typeString" />
<table border="0" width="500">
<tr><td  align="right">文件路径:</td>
<td ><input type="text" name="filePath" id="filePath" />
   <input type="submit" name="submit"  onclick="serach()" value="搜索"/>
</td></tr><tr>
<td  align="right">文件名称:</td>
<td ><input type="text" name="fileName" id="fileName" /></td>
</tr><tr>
<td  align="right">后缀:</td>
<td ><select id="typeName">
<option value=".txt">.txt</option>
<option value=".zip">.zip</option>
<option value=".gif">.dll</option>
<option value=".jpg">.jpg</option>
<option value=".bmp">.bmp</option>
<option value=".xls">.xls</option>
<option value=".doc">.doc</option>
<option value=".xml">.xml</option>
<option value=".rar">.rar</option>
</select></td></tr>
<tr height="100">
<td colspan="2" align="center">
<textarea rows="6" cols="45"><%
                   if(files!=null){
                       for(File file:files){
                           out.println(file.getAbsolutePath());
                       }
                   }
%></textarea>
</td>
</tr>
</table>

serach函数 获取到后缀下拉框的值并赋给隐藏的input传递到Servlet

function serach(){
        var typeName = document.getElementById("typeName");
        document.getElementById("typeString").value= typeName.value
}

FileDemoServlet关键代码 获取传过来的文件路径,文件名关键字、扩展名,不为空则调用搜索文件的方法,将方法返回的集合保存到域中后转发到index.jsp

List<File> files = null;
request.setCharacterEncoding("UTF-8");        
String filePath = request.getParameter("filePath");      //获取文件路径
String fileName = request.getParameter("fileName");      //获取文件名关键字
String extendName = request.getParameter("typeString");  //文件扩展名
if(filePath!=null&&!filePath.equals("")&&
fileName!=null&&!fileName.equals("")&&
            extendName!=null&&!extendName.equals("")){    
files= FileUtil.findFiles(filePath,fileName,extendName);//调用的方法
//省略了部分代码
        }

定义一个返回值为List<File>的方法,用于实现文件搜索功能,该方法三个参数分别是指定搜索目录路径,搜索文件名称,文件的扩展名,获取到文件数组后遍历文件数组,再调用findFileName方法(文件匹配方法),符合匹配就添加到集合中

public static List<File> findFiles(String baseName, String tarFileName,String exStr) {
       List<File> fileList = new ArrayList<File>();//定义保存返回值的List对象
        File baseDir = new File(baseName); //创建File对象,参数为baseName
        if (!baseDir.exists() || !baseDir.isDirectory()) {//不是目录或不存在
            return fileList;                           //返回
        }
        String tempName = null;
        File[] files = baseDir.listFiles(new ExtendFileNameFilter(exStr));       //获取参数目录下的文件数组
        for (File file:files) {    //循环遍历文件数组
            if (!file.isDirectory()) {    //如果数组中的文件不是一个目录
tempName = file.getName();         //获取该数组的名称
                if (findFileName(tarFileName, tempName)) { //调用文件匹配方法
fileList.add(file.getAbsoluteFile()); //将指定的文件名添加到集合中
                }}}
        return fileList;
}

findFileName方法 这个方法用于查找匹配的文件,如果查找的文件名称和搜索的方式匹配,就返回true,否则false

public static boolean findFileName(String FileName, String name) {
        int length = FileName.length();    // 获取参数的长度
        int startLength = name.length();
        int strIndex = 0;
        char eleChar;
        for (int i = 0; i < length; i++) { // 遍历字符参数字符串的字符
eleChar = FileName.charAt(i);     // 获取字符串中每个索引位置的字符
            if (eleChar == '*') {      // 如果是星号表示任意多个字符
                while (strIndex < startLength) {
                    if (findFileName(FileName.substring(i + 1), name
                            .substring(strIndex))) { // 如果文件名与搜索模型匹配
                        return true;
                    }
strIndex++; }
            } else if (eleChar == '?') {   // 如果包含问号 表示一个任意字符
strIndex++;
                if (strIndex > startLength) { // 如果str中没有字符可以匹配“?”号
                    return false;
                }
            } else { 
                if ((strIndex >= startLength) || (eleChar != name.charAt(strIndex))) {      // 如果没有查找到匹配的文件
                    return false;
                }
strIndex++;
            } }
        return (strIndex == startLength);     
}

ExtendFileNameFilter过滤器代码(用于判断是否文件的扩展名是否跟指定扩展名相同,相同返回true,反之false)

public class ExtendFileNameFilter implements FileFilter {
     private String extendName;//过滤文件扩展名
     public ExtendFileNameFilter(String extend){
         this.extendName = extend;
     }
@Override
     public boolean accept(File pathname) {
         if (pathname.getName().toLowerCase().endsWith(extendName.toLowerCase())
             ||pathname.isDirectory())//文件的扩展名是否跟指定扩展名一样
         {
         return true;
         }  
         else { 
         }
         return false;
     }
}
效果

java批量保存数据 java如何实现批量删除_文件路径_02