栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java修改文件名称】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java修改文件名称】

											
import org.slf4j.Logger;											
import org.slf4j.LoggerFactory;											
											
import java.io.*;											
import java.text.DecimalFormat;											
import java.text.Format;											
import java.util.*;											
import java.util.stream.Collectors;											
											
											
public class FileNameChangeMain {											
											
    private static Logger logger = LoggerFactory.getLogger(FileNameChangeMain.class);											
											
    public static void main(String[] args){											
											
        if ((args == null) || (args.length != 1)) {											
            logger.error("Illegal argument count error.");											
        }else {											
			// 取参数
            String filePath = args[0];											
            logger.info("Start! filePath:" + filePath);											
													
            try{											
                String originalPath = filePath.substring(0,filePath.lastIndexOf("\")+1);		
                //创建一个文件类实例,抽象路径名是 targetPath									
                File targetPath = new File( originalPath + "\out");											
                File errPath = new File( originalPath + "\error");						
                //判断抽象路径名指定的路径或者文件是否存在					
                if(!targetPath.exists()){											
                    targetPath.mkdir();											
                }else{											
                    int delRet = deleteFile(String .valueOf(targetPath));											
                    if(delRet != 0){											
                        logger.error("delete out file is error.");											
                        return;											
                    }											
                }											
                if(!errPath.exists()){											
                    errPath.mkdir();											
                }else{											
                    int delRet = deleteFile(String .valueOf(errPath));											
                    if(delRet != 0){											
                        logger.error("delete err file is error.");											
                        return;											
                    }											
                }											
                File fileDir = new File(filePath);											
                if(!fileDir.exists()){											
                    logger.error("origin file is error.");											
                }		
                //取路径下的文件list									
                File[] files = fileDir.listFiles();											
                ArrayList fileList = new ArrayList<>();											
											
                for(File originFile : files){											
                    copyFiles(originFile,targetPath,errPath,fileList);											
                }											
            }catch (Exception e){											
                logger.error("file read error. :" + filePath, e);											
            }											
            logger.info("Finish!");											
        }											
    }											
											
    public static void copyFiles(File originFile, File targetPath, File errPath, ArrayList fileList) throws IOException{											
        logger.info("originFile : "+ originFile.getName());											
        String[] originNames = originFile.getName().split("\.");							
        //String:字符串常量,字符串长度不可变。字符串变量(Synchronized,即线程安全)。
        //如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,
        //可以调用 StringBuffer 的 toString() 方法。	
        //	使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。
        //所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。		
        StringBuilder  newName = new StringBuilder();											
        String  keyName = "";											
        Format formatName = new DecimalFormat("000");											
        //newNameと同じなファイル名											
        ArrayList subList = new ArrayList<>();											
        File tagetFile = null;											
        int ret = 0;											
        if(originNames.length > 0){											
            //file name change											
            ret = check(originNames,newName);											
        }											
        if(ret == 0 && !"".equals(newName) ){											
            //查询list中符合条件的元素								
            subList = (ArrayList) fileList.stream().filter(v -> v.toString().contains(newName)).collect(Collectors.toList());											
            int maxNum = 0;											
            for(String subName : subList){											
                int subNum = Integer.parseInt(subName.substring(subName.length()-3));											
                if(subNum > maxNum){											
                    maxNum = subNum;											
                }											
            }											
            if(maxNum == 0){											
                keyName = newName + "001";											
            }else {											
                String num = formatName.format(maxNum + 1);											
                keyName = newName + num;											
            }											
            fileList.add(keyName);											
            tagetFile = new File(targetPath,keyName);											
        }else {											
            //error file											
            tagetFile = new File(errPath,originFile.getName());											
        }											
        //创建读入流,从实际存在的文件读数据
        //创建写入流				
        FileInputStream fis = new FileInputStream(originFile);											
        FileOutputStream fos = new FileOutputStream(tagetFile);											
											
        int data;											
        while ((data = fis.read()) != -1) {											
            fos.write(data);											
            fos.flush();											
        }											
        fis.close();											
        fos.close();											
    }											
											
    public static int check(String[] originNames,StringBuilder newName){											
        int ret = 0;											
        switch (originNames.length){											
            case 5:											
                newName.append(originNames[3]);											
                newName.append("_");											
                newName.append(originNames[0]);											
                break;											
            case 7:											
                if("a".equals(originNames[originNames.length -1]) || "s".equals(originNames[originNames.length -1])){											
                    newName.append(originNames[5]);											
                    newName.append("_");											
                    newName.append(originNames[1]);											
                    newName.append(originNames[2]);											
                }else {											
                    logger.error("online filename is Error!");											
                    ret = -1;											
                }											
                break;											
            default:											
                logger.error("File Name Format is Error!");											
                ret = -1;											
                break;											
        }											
											
        return ret;											
    }											
											
    public static int deleteFile(String deletePath){											
        int ret = 0;											
        File file = new File(deletePath);											
        String[] content = file.list();											
        for (String name : content){											
            File temp = new File(deletePath, name);											
            if (temp.isDirectory()) {//判断是否是目录											
                deleteFile(temp.getAbsolutePath());//递归调用,删除目录里的内容											
                temp.delete();//删除空目录											
            } else {											
                if (!temp.delete()) {//直接删除文件											
                    ret = -1;											
                }											
            }											
        }											
        return ret;											
    }											
}											

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号