Java的文件操作太基础,缺乏很多实用工具,比如对目录的操作,支持就非常的差了。如果你经常用Java操作文件或文件夹,你会觉得反复编写这些代码是令人沮丧的问题,而且要大量用到递归。
下面是的一个解决方案,借助Apache Commons IO工具包来简单实现文件(夹)的复制、移动、删除、获取大小等操作。
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.*;
/**
* 文件工具箱
*
*/
public final class FileToolkit {
private static final Log log = LogFactory.getLog(FileToolkit.class);
/**
* 复制文件或者目录,复制前后文件完全一样。
*
* @param resFilePath 源文件路径
* @param distFolder 目标文件夹
* @IOException 当操作发生异常时抛出
*/
public static void copyFile(String resFilePath, String distFolder) throws IOException {
File resFile = new File(resFilePath);
File distFile = new File(distFolder);
if (resFile.isDirectory()) {
FileUtils.copyDirectoryToDirectory(resFile, distFile);
} else if (resFile.isFile()) {
FileUtils.copyFileToDirectory(resFile, distFile, true);
}
}
/**
* 删除一个文件或者目录
*
* @param targetPath 文件或者目录路径
* @IOException 当操作发生异常时抛出
*/
public static void deleteFile(String targetPath) throws IOException {
File targetFile = new File(targetPath);
if (targetFile.isDirectory()) {
FileUtils.deleteDirectory(targetFile);
} else if (targetFile.isFile()) {
targetFile.delete();
}
}
/**
* 移动文件或者目录,移动前后文件完全一样,如果目标文件夹不存在则创建。
*
* @param resFilePath 源文件路径
* @param distFolder 目标文件夹
* @IOException 当操作发生异常时抛出
*/
public static void moveFile(String resFilePath, String distFolder) throws IOException {
File resFile = new File(resFilePath);
File distFile = new File(distFolder);
if (resFile.isDirectory()) {
FileUtils.moveDirectoryToDirectory(resFile, distFile, true);
} else if (resFile.isFile()) {
FileUtils.moveFileToDirectory(resFile, distFile, true);
}
}
/**
* 重命名文件或文件夹
*
* @param resFilePath 源文件路径
* @param newFileName 重命名
* @return 操作成功标识
*/
public static boolean renameFile(String resFilePath, String newFileName) {
String newFilePath = StringToolkit.formatPath(StringToolkit.getParentPath(resFilePath) + "/" + newFileName);
File resFile = new File(resFilePath);
File newFile = new File(newFilePath);
return resFile.renameTo(newFile);
}
/**
* 读取文件或者目录的大小
*
* @param distFilePath 目标文件或者文件夹
* @return 文件或者目录的大小,如果获取失败,则返回-1
*/
public static long genFileSize(String distFilePath) {
File distFile = new File(distFilePath);
if (distFile.isFile()) {
return distFile.length();
} else if (distFile.isDirectory()) {
return FileUtils.sizeOfDirectory(distFile);
}
return -1L;
}
/**
* 判断一个文件是否存在
*
* @param filePath 文件路径
* @return 存在返回true,否则返回false
*/
public static boolean isExist(String filePath) {
return new File(filePath).exists();
}
/**
* 本地某个目录下的文件列表(不递归)
*
* @param folder ftp上的某个目录
* @param suffix 文件的后缀名(比如.mov.xml)
* @return 文件名称列表
*/
public static String[] listFilebySuffix(String folder, String suffix) {
IOFileFilter fileFilter1 = new SuffixFileFilter(suffix);
IOFileFilter fileFilter2 = new NotFileFilter(DirectoryFileFilter.INSTANCE);
FilenameFilter filenameFilter = new AndFileFilter(fileFilter1, fileFilter2);
return new File(folder).list(filenameFilter);
}
/**
* 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!)
*
* @param res 原字符串
* @param filePath 文件路径
* @return 成功标记
*/
public static boolean string2File(String res, String filePath) {
boolean flag = true;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
File distFile = new File(filePath);
if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs();
bufferedReader = new BufferedReader(new StringReader(res));
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
char buf[] = new char[1024]; //字符缓冲区
int len;
while ((len = bufferedReader.read(buf)) != -1) {
bufferedWriter.write(buf, 0, len);
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
} catch (IOException e) {
flag = false;
e.printStackTrace();
}
return flag;
}
}
分享到:
相关推荐
总结起来,"java文件上传下载工具类"是Java Web开发中不可或缺的部分,它封装了与文件操作相关的复杂逻辑,使开发者能够更专注于业务逻辑。通过创建这样的工具类,可以提高代码的可复用性和可维护性,同时降低出错的...
总的来说,"Java转Pas文件官方工具"为Java和Delphi之间的代码互操作提供了一个桥梁,它允许开发者利用Java的丰富库和工具集来增强Delphi项目,同时也能让Java开发者更轻松地进入Delphi开发领域。通过深入理解和有效...
以上内容只是Java文件与流操作的冰山一角,实际开发中,开发者还需要结合具体场景,灵活运用这些工具,以实现高效、可靠的I/O操作。通过学习和实践,你可以逐步掌握这个领域的核心知识,并应用于各种项目中。
Java文件切割工具是一种实用程序,它允许用户将大型文件拆分为多个较小的部分,这对于大文件传输、存储优化或分布式处理非常有用。这个工具是自编写的,因此代码本身提供了宝贵的编程学习机会,尤其是对于那些对Java...
Java.IO包是进行文件操作的主要工具,包含了众多类和接口,如File、FileReader/Writer、BufferedReader/Writer、InputStream/OutputStream等,用于处理输入输出流。 2. **File类** File类是文件和目录路径名的...
Java文件管理器是一款基于Java编程语言开发的软件,它的主要功能是模拟Windows操作系统中的文件管理系统,让用户能够方便地浏览、操作、管理和组织计算机上的文件和目录。作为一个专业的IT大师,我将详细介绍Java...
总的来说,这个Java实现的文件加密工具是一个结合了位运算和异或操作的实用程序,提供了多样化的加密方式,适用于不同层次的用户需求。它不仅教育用户关于基本的加密原理,也为实际项目提供了安全数据保护的解决方案...
在Java编程环境中,实现一个操作系统级别的文件系统是一项挑战性的工作,因为这涉及到对底层硬件、内存管理和并发控制的理解。然而,通过使用Java提供的类库和API,我们可以构建一个模拟的文件系统,它能够进行基本...
ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...
JDK1.8.0_66是Oracle公司发布的一个特定版本,它包含了Java运行时环境(JRE)、Java编译器(javac)、Java调试器(jdb)以及其他必要的工具,适用于Windows操作系统。 1. **Java运行时环境(JRE)**:这是执行Java...
在本话题中,我们将深入探讨“eclipse插件,打开java文件目录”这一主题。 首先,了解Eclipse插件的基本概念。Eclipse作为一个开放平台,其核心架构允许开发者创建和集成自定义工具,这些工具就是我们所说的插件。...
作为开源软件,这个工具允许开发者查看和修改其源代码,可以根据自身需求进行定制,增强了灵活性和可扩展性。 总的来说,"JAVA增量包打包工具"是Java开发中的一款利器,它通过自动化、智能化的方式解决了大型项目...
"性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...
同时,可能需要使用位操作和数据类型转换来处理二进制数据,因为Java默认处理的是基于字节的流,而ELF文件中的数据可能是16位、32位或64位的整数、浮点数等。 开发这样一个解析库可能会涉及到以下步骤: 1. 定义...
比如,Files类(在Java NIO.2中引入)提供了大量的文件操作方法,如读写文件、检查文件属性等。而在网络编程中,HttpURLConnection和HttpClient类可以帮助我们发送HTTP请求和处理响应。 总的来说,Java工具类是对...
由于JAVA的跨平台特性,这些数据库小工具往往能在Windows、Linux、Mac OS等操作系统上运行,增强了其适用性和灵活性。 8. **集成开发环境(IDE)集成** 一些工具可以与常用的Java IDE(如Eclipse、IntelliJ IDEA)...
总的来说,Java Class文件查看器是Java开发人员不可或缺的工具之一,它扩展了对编译后代码的理解,增强了问题诊断和代码分析的能力。通过熟练掌握此类工具,开发者可以更有效地调试代码,优化性能,并深入理解Java...
Java必备工具包是一个集合了多个对Java学习至关重要的资源的压缩文件。这个包包含了各种工具和文档,旨在帮助Java开发者和学习者提升他们的技能和理解。让我们逐一解析这些包含的文件,看看它们提供了哪些关键知识点...
2. **数据库支持**:作为一款DB工具,JavaTools应支持多种常见的数据库系统,如MySQL、Oracle、SQL Server、PostgreSQL等,允许用户连接并操作不同类型的数据库。 3. **数据导入导出功能**:JavaTools的核心功能是...
在Java编程语言中,开发者编写源代码(.java文件)并使用Java编译器(javac)将其编译成字节码(.class文件),这些字节码可以在Java虚拟机(JVM)上运行。然而,有时候我们可能需要查看或理解已编译的.class文件中...