Java 文件名操作的相关工具类

简介:

项目中的操作文件名的工具类:

复制代码
  1 import java.io.File;
  2 import java.util.regex.Matcher;
  3 import java.util.regex.Pattern;
  4 
  5 public class FileNameUtil {
  6     /**
  7      * 修改指定文件的扩展名
  8      * @param fileName
  9      * @param newExt
 10      * @return
 11      */
 12     public static String changeFileExt(String fileName, String newExt){
 13         return fileName.replaceAll("\\.[^\\.\\\\/]*$", "") + "." + newExt.replaceAll("^\\.", "");
 14     }
 15     /**
 16      * 去掉文件的扩展名
 17      * @param fileName
 18      * @return
 19      */
 20     public static String removeFileExt(String fileName){
 21         return fileName.replaceAll("\\.[^\\\\/\\.]*$", "");
 22     }
 23     
 24     /**
 25      * 修正文件名错误,主要包括出现/的、双\\的 
 26      * @param fileName
 27      * @return
 28      */
 29     public static String correctFileName(String fileName){
 30         return fileName.replaceAll("(?!^)[\\\\/]+", "\\\\");
 31     }
 32     /**
 33      * 修正文件名错误,主要包括出现/的、双\\的 成为linux 
 34      * @param fileName
 35      * @return
 36      */
 37     public static String correctFileName4Linux(String fileName){
 38         return fileName.replaceAll("(?!^)[\\\\/]+", "/");
 39     }
 40     
 41     /**
 42      * 判断文件是否存在 
 43      * @param fileName
 44      * @return
 45      */
 46     public static boolean isFileExists(String fileName){
 47         //把一个或多个\或/替换成1个
 48         File f = new File(correctFileName(fileName));
 49         try{
 50             return f.exists();
 51         }finally{
 52             f = null;
 53         }
 54     }
 55     
 56     /**
 57      * 连接两个文件名
 58      * @param base
 59      * @param addition
 60      * @return
 61      */
 62     public static String fileNameAdd(String base, String addition){
 63         return base.replaceAll("[\\\\/]+$", "") + "\\" + addition.replaceAll("^[\\\\/]+", "");
 64     }
 65     
 66     /**
 67      * 是不是UNC路径 
 68      * @param fileName
 69      * @return
 70      */
 71     public static boolean isUNC(String fileName){
 72         return fileName.matches("^\\\\{2}[^\\\\/]+\\\\[\\s\\S]*$");
 73     }
 74     
 75     /**
 76      * 获取文件名的扩展名 
 77      * @param fileName
 78      * @return
 79      */
 80     public static String extractFileExt(String fileName){
 81         Pattern p = Pattern.compile("\\.[^\\\\/.]+$");
 82         Matcher m = p.matcher(fileName);
 83         return m.find()? m.group() : "";
 84     }
 85     
 86     /**
 87      * 获取文件的路径(最后的\会被去掉) 
 88      * @param fileName
 89      * @return
 90      */
 91     public static String extractFilePath(String fileName){
 92         return fileName.replaceAll("[\\\\/][^\\\\/]*$", "");
 93     }
 94     
 95     /**
 96      * 获取文件绝对路径的文件名部分 
 97      * @param fileName
 98      * @return
 99      */
100     public static String extractFileName(String fileName){
101         return fileName.replaceAll("^[\\s\\S]*[\\\\/]", "");
102     }
103     
104     /**
105      * 获取相对路径(去掉盘符或UNC的主机)
106      * @param fileName
107      * @return
108      */
109     public static String extractRelativePath(String fileName){
110         if(isUNC(fileName)){
111             return fileName.replaceAll("^\\\\{2}[^\\\\/]+[\\\\/]+", "");
112         }else{
113             return fileName.replaceAll("^.*\\:\\\\+", "");
114         }
115     }
116     
117     /**
118      * 把盘符 和 文件路径拼接起来 得到完整的文件地址,自动判断拼接的时候前面是不是有  斜杠 
119      * @param driverOrLpath windows系统下的盘符,或者是linux系统下的路径
120      * @param filename 文件的路径 如: 二次合成\2011\IPTV\上海文广\电影\123456_变形金刚.ts
121      */
122     public static String joinPath(String driverOrLpath,String filename ){
123         String d = driverOrLpath.replaceAll("[\\\\/]*$", "") ;
124         filename = filename.replaceAll("^[\\\\/]*", ""); // 把开头的 斜杠都去掉,后面统一加
125         
126         return d + File.separator + filename;
127     }
128     
129     /**
130      * 功能:替换掉文件名字中的特殊字符
131      * 时间:2016-01-21
132      * @param filename
133      * @return
134      */
135     public static String removeSpecialcharacter(String filename){
136          Pattern pattern=Pattern.compile("[\u4e00-\u9fa5]");//中文汉字编码区间  
137            Matcher matcher;
138            char[] array = filename.toCharArray();
139            for (int i = 0; i < array.length; i++) {
140                 if((char)(byte)array[i]!=array[i]){//取出双字节字符
141                     matcher=pattern.matcher(String.valueOf(array[i]));
142                     if(!matcher.matches()){//中文汉字无需替换
143                         filename=filename.replaceAll(String.valueOf(array[i]), "");//特殊字符用空字符串替换
144                     }
145                 }
146             }
147            return filename;
148     }
149     
150     public static void main(String[] args) {
151         
152     }
153 }
复制代码

 

 得到一个文件/目录下文件名/路径  或者是子文件的子文件名....

复制代码
 1     /*
 2      * 如果想要获得当前文件中的文件名只需要String [] fileName = file.list();就可以了。
 3      * 如果要包括文件中的文件名就可以用递归的方式。下面是两个具体的实现。 
 4      * 其中public static String [] getFileName(String path)是只得到当前文件中的文件名。
 5      * public static void getAllFileName(String path,ArrayList<String> fileName)是包括当前文件及其子文件的文件名。
 6      */
 7     public static String[] getFileName(String path) {
 8         File file = new File(path);
 9         String[] fileName = file.list();
10         return fileName;
11     }
12     
13     public static ArrayList<String> getFilePath(String parentPath) {
14         ArrayList<String> childFilesPathList = new ArrayList<String>();
15         File parentFile = new File(parentPath);
16         File[] childFiles = parentFile.listFiles();
17         for (File childFile : childFiles) {
18             childFilesPathList.add(childFile.getAbsolutePath());
19         }
20         return childFilesPathList;
21     }
22 
23     public static void getAllFileName(String path, ArrayList<String> fileName) {
24         File file = new File(path);
25         File[] files = file.listFiles();
26         String[] names = file.list();
27         if (names != null)
28             fileName.addAll(Arrays.asList(names));
29         for (File a : files) {
30             if (a.isDirectory()) {
31                 getAllFileName(a.getAbsolutePath(), fileName);
32             }
33         }
34     }
复制代码

 



本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5760220.html,如需转载请自行联系原作者
相关文章
|
29天前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
96 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
13 1
|
3月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
26 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
3月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
4月前
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
47 4
|
3月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
50 0
|
4月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
61 1
|
4月前
|
并行计算 Java 数据挖掘
Java面试题:解释Java中的Stream API及其操作
Java面试题:解释Java中的Stream API及其操作
54 0
|
4月前
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
39 0