package org.apache.cxf.helpers; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.cxf.common.util.SystemPropertyAction; public final class FileUtils { private static final int RETRY_SLEEP_MILLIS = 10; private static File defaultTempDir; private FileUtils() { } public static synchronized File getDefaultTempDir() { if (defaultTempDir != null && defaultTempDir.exists()) { return defaultTempDir; } String s = SystemPropertyAction.getPropertyOrNull(FileUtils.class.getName() + ".TempDirectory"); if (s != null) { //assume someone outside of us will manage the directory File f = new File(s); if (f.mkdirs()) { defaultTempDir = f; } } if (defaultTempDir == null) { int x = (int)(Math.random() * 1000000); s = SystemPropertyAction.getProperty("java.io.tmpdir"); File checkExists = new File(s); if (!checkExists.exists() || !checkExists.isDirectory()) { throw new RuntimeException("The directory " + checkExists.getAbsolutePath() + " does not exist, please set java.io.tempdir" + " to an existing directory"); } if (!checkExists.canWrite()) { throw new RuntimeException("The directory " + checkExists.getAbsolutePath() + " is now writable, please set java.io.tempdir" + " to an writable directory"); } File f = new File(s, "cxf-tmp-" + x); while (!f.mkdir()) { x = (int)(Math.random() * 1000000); f = new File(s, "cxf-tmp-" + x); } defaultTempDir = f; final File f2 = f; Thread hook = new Thread() { @Override public void run() { removeDir(f2, true); } }; Runtime.getRuntime().addShutdownHook(hook); } return defaultTempDir; } public static void mkDir(File dir) { if (dir == null) { throw new RuntimeException("dir attribute is required"); } if (dir.isFile()) { throw new RuntimeException("Unable to create directory as a file " + "already exists with that name: " + dir.getAbsolutePath()); } if (!dir.exists()) { boolean result = doMkDirs(dir); if (!result) { String msg = "Directory " + dir.getAbsolutePath() + " creation was not successful for an unknown reason"; throw new RuntimeException(msg); } } } /** * Attempt to fix possible race condition when creating directories on * WinXP, also Windows2000. If the mkdirs does not work, wait a little and * try again. */ private static boolean doMkDirs(File f) { if (!f.mkdirs()) { try { Thread.sleep(RETRY_SLEEP_MILLIS); return f.mkdirs(); } catch (InterruptedException ex) { return f.mkdirs(); } } return true; } public static void removeDir(File d) { removeDir(d, false); } private static void removeDir(File d, boolean inShutdown) { String[] list = d.list(); if (list == null) { list = new String[0]; } for (int i = 0; i < list.length; i++) { String s = list[i]; File f = new File(d, s); if (f.isDirectory()) { removeDir(f, inShutdown); } else { delete(f, inShutdown); } } delete(d, inShutdown); } public static void delete(File f) { delete(f, false); } public static void delete(File f, boolean inShutdown) { if (!f.delete()) { if (isWindows()) { System.gc(); } try { Thread.sleep(RETRY_SLEEP_MILLIS); } catch (InterruptedException ex) { // Ignore Exception } if (!f.delete() && !inShutdown) { f.deleteOnExit(); } } } private static boolean isWindows() { String osName = SystemPropertyAction.getProperty("os.name").toLowerCase(Locale.US); return osName.indexOf("windows") > -1; } public static File createTempFile(String prefix, String suffix) throws IOException { return createTempFile(prefix, suffix, null, false); } public static File createTempFile(String prefix, String suffix, File parentDir, boolean deleteOnExit) throws IOException { File result = null; File parent = (parentDir == null) ? getDefaultTempDir() : parentDir; if (suffix == null) { suffix = ".tmp"; } if (prefix == null) { prefix = "cxf"; } else if (prefix.length() < 3) { prefix = prefix + "cxf"; } result = File.createTempFile(prefix, suffix, parent); //if parentDir is null, we're in our default dir //which will get completely wiped on exit from our exit //hook. No need to set deleteOnExit() which leaks memory. if (deleteOnExit && parentDir != null) { result.deleteOnExit(); } return result; } public static String getStringFromFile(File location) { InputStream is = null; String result = null; try { is = new FileInputStream(location); result = normalizeCRLF(is); } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (Exception e) { //do nothing } } } return result; } public static String normalizeCRLF(InputStream instream) { BufferedReader in = new BufferedReader(new InputStreamReader(instream)); StringBuilder result = new StringBuilder(); String line = null; try { line = in.readLine(); while (line != null) { String[] tok = line.split("\\s"); for (int x = 0; x < tok.length; x++) { String token = tok[x]; result.append(" " + token); } line = in.readLine(); } } catch (Exception ex) { ex.printStackTrace(); } String rtn = result.toString(); rtn = ignoreTokens(rtn, "<!--", "-->"); rtn = ignoreTokens(rtn, "/*", "*/"); return rtn; } private static String ignoreTokens(final String contents, final String startToken, final String endToken) { String rtn = contents; int headerIndexStart = rtn.indexOf(startToken); int headerIndexEnd = rtn.indexOf(endToken); if (headerIndexStart != -1 && headerIndexEnd != -1 && headerIndexStart < headerIndexEnd) { rtn = rtn.substring(0, headerIndexStart - 1) + rtn.substring(headerIndexEnd + endToken.length() + 1); } return rtn; } public static List<File> getFiles(File dir, final String pattern) { return getFiles(dir, pattern, null); } public static List<File> getFilesRecurse(File dir, final String pattern) { return getFilesRecurse(dir, pattern, null); } public static List<File> getFiles(File dir, final String pattern, File exclude) { return getFilesRecurse(dir, Pattern.compile(pattern), exclude, false, new ArrayList<File>()); } public static List<File> getFilesRecurse(File dir, final String pattern, File exclude) { return getFilesRecurse(dir, Pattern.compile(pattern), exclude, true, new ArrayList<File>()); } private static List<File> getFilesRecurse(File dir, Pattern pattern, File exclude, boolean rec, List<File> fileList) { for (File file : dir.listFiles()) { if (file.equals(exclude)) { continue; } if (file.isDirectory() && rec) { getFilesRecurse(file, pattern, exclude, rec, fileList); } else { Matcher m = pattern.matcher(file.getName()); if (m.matches()) { fileList.add(file); } } } return fileList; } public static List<String> readLines(File file) throws Exception { if (!file.exists()) { return new ArrayList<String>(); } BufferedReader reader = new BufferedReader(new FileReader(file)); List<String> results = new ArrayList<String>(); try { String line = reader.readLine(); while (line != null) { results.add(line); line = reader.readLine(); } } finally { reader.close(); } return results; } }
相关推荐
实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能
,复制单个文件到指定路径,复制整个文件夹到指定路径,复制文件夹下所有文件到指定路径,删除单个文件,删除文件夹下所有文件,删除文件夹以及文件下下所有文件。。。等
【Java基础】-- FileUtils工具类常用方法 ...总之,Apache Commons IO的FileUtils工具类为Java开发者提供了一套强大且易用的文件操作API,极大地简化了日常开发中的文件处理工作,值得在项目中广泛使用。
支持多线程上传下载,支持断点续传功能的一个工具类。
`FileUtils` 是一个强大的文件处理工具类,它提供了丰富的API来简化文件操作,避免了许多常见的错误和陷阱。通过使用该工具类,开发者可以更加专注于业务逻辑的实现,提高开发效率和代码质量。在实际项目中,强烈...
删除文件 文件名称验证 检查文件是否可下载 下载文件名重新编码 返回文件名 是否为Windows或者Linux(Unix)文件分隔符,Windows平台下分隔符为\,Linux(Unix)为/ 百分号编码工具方法
Java中的`File`类是Java I/O流体系中不可或缺的一部分,它是用来操作...结合`FileUtils`这样的辅助工具类,我们可以编写出更简洁、易维护的代码。在实际开发中,还应考虑异常处理和错误恢复策略,以确保程序的健壮性。
`FileUtils`是一个方便的工具类,用于简化这些操作。本篇将详细讲解如何利用`FileUtils`实现文件的上传和下载,并介绍如何在Java Web项目中集成和使用这个工具。 首先,`FileUtils`并不是Java标准库的一部分,而是...
QrcodeUtils.java\防止SQL注入和XSS攻击Filter\获取文件绝对路径最后的文件夹名称\加密工具类 - CryptoUtils.java\日期工具类 - DateUtil.java\图片处理工具类 - ImageUtils.java\文件相关操作工具类——FileUtils....
文件工具类FileUtils,对文件中内容行数lines的总数统计
这些工具类通常包含了对字符串、数组、集合、日期时间等基本数据类型的操作,以及文件I/O、网络通信、线程控制等更复杂功能的辅助方法。下面将详细介绍`opslabJutil-master`这个工具类库可能包含的一些核心知识点。 ...
D:\002 我的工具类\001 流\文件操作整体2\FileUtils.java D:\002 我的工具类\001 流\文件操作整体2\IOUtils.java D:\002 我的工具类\001 流\文件操作整体2\PropertiesUtil.java D:\002 我的工具类\0013数字 D:\002 ...
Android文件操作工具类FileUtil详解 在Android开发中,文件操作是非常重要的一部分,涵盖了文件的获取、遍历、搜索、复制、删除、判断等多种功能。为了方便开发者更好地进行文件操作,今天我们将详细介绍Android...
- 使用`FileUtils`或`Files`类来操作文件和目录,提供更便捷和安全的文件操作。 在实际应用中,`ZipUtil`工具类可以帮助开发者快速实现文件和目录的压缩功能,而无需深入理解复杂的压缩算法。其处理中文文件名的...
通过输入文件地址和目标地址,对文件的复制操作,通过输入File对象和目标File对象,对文件的辅助操作
2.文件处理工具类:FileUtils 3.图片处理工具类:ImageUtils 4.媒体类型工具类:MimeTypeUtils 5.字符集工具类:CharsetKit 6.request请求处理工具类:CommonUtil 7.类型转换器:Convert 8.时间工具类:DateUtils 9....
在Java编程中,文件工具类(FileUtil)是开发者经常使用的工具,用于处理与文件系统相关的操作。在MapReduce框架中,数据通常是以文件的形式存储在分布式文件系统中,如Hadoop的HDFS。因此,当运行MapReduce作业时,...
- 文件操作是开发中常见的需求,这类工具类可能包含读写文件、创建删除文件或目录、文件流处理等功能。例如,`FileUtils`类可能封装了Java的`File`类和`InputStream/OutputStream`的常用操作,提供了一致和简单的...
4. **FileUtil**: 这个工具类通常用于文件和目录的操作,如读写文件、复制、移动、删除、检查文件是否存在等。它可能包含了Apache Commons IO库中的`FileUtils`类,或者开发者自定义的实现。 5. **RandomUtil**: ...
1. **FileUtils**: 这个工具类主要处理与文件和目录相关的操作。它可能提供了如创建、删除、复制、移动文件,读取文件内容,检查文件是否存在等功能。例如,`readFileToString()`方法用于将整个文件读取为字符串,`...