package com.zqk.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* @author qeekey
* @创建时间:2010-9-9 下午03:03:13
* 类说明 文件处理工具类
* Description:实现文件的简单处理,复制文件、目录等
*/
public class FileUtil {
private String ENCODING ="gbk"; //字符编码
/***
* 读文件
* @param filename
* @return 文件内容
* @throws Exception
*/
public String ReadFile(String filename) throws Exception {
StringBuffer filebuf = new StringBuffer();
File file = new File(filename);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(new FileInputStream(file), ENCODING);
BufferedReader in = new BufferedReader(read);
String line1;
while ((line1 = in.readLine()) != null) {
filebuf.append(line1).append("\r\n");
}
read.close();
in.close();
}
return filebuf.toString();
}
/***
* 写文件 这种输出方法可以忽略平台目录问题,在windows linux下都可完美运行
* @param content
* @param filename
* @throws Exception
*/
public void WriteFile(String content, String filename) throws Exception {
File file = new File(filename);
StringBuffer jspbuff = new StringBuffer();
jspbuff.append(content);
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file),ENCODING);
out.write(jspbuff.toString());
out.flush();
out.close();
}
/**
* 复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去。
* @param targetFile
* @param path
*/
public static void copyFileFromDir(String targetDir, String path) {
File file = new File(path);
createFile(targetDir, false);
if (file.isDirectory()) {
copyFileToDir(targetDir, listFile(file));
}
}
/**
* 复制目录下的文件(不包含该目录和子目录,只复制目录下的文件)到指定目录。
* @param targetDir
* @param path
*/
public static void copyFileOnly(String targetDir, String path) {
File file = new File(path);
File targetFile = new File(targetDir);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File subFile : files) {
if (subFile.isFile()) {
copyFile(targetFile, subFile);
}
}
}
}
/**
* 复制目录到指定目录。targetDir是目标目录,path是源目录。 该方法会将path以及path下的文件和子目录全部复制到目标目录
* @param targetDir
* @param path
*/
public static void copyDir(String targetDir, String path) {
File targetFile = new File(targetDir);
createFile(targetFile, false);
File file = new File(path);
if (targetFile.isDirectory() && file.isDirectory()) {
copyFileToDir(targetFile.getAbsolutePath() + "/" + file.getName(),
listFile(file));
}
}
/**
* 复制一组文件到指定目录。targetDir是目标目录,filePath是需要复制的文件路径
* @param targetDir
* @param filePath
*/
public static void copyFileToDir(String targetDir, String... filePath) {
if (targetDir == null || "".equals(targetDir)) {
System.out.println("参数错误,目标路径不能为空");
return;
}
File targetFile = new File(targetDir);
if (!targetFile.exists()) {
targetFile.mkdir();
} else {
if (!targetFile.isDirectory()) {
System.out.println("参数错误,目标路径指向的不是一个目录!");
return;
}
}
for (String path : filePath) {
File file = new File(path);
if (file.isDirectory()) {
copyFileToDir(targetDir + "/" + file.getName(), listFile(file));
} else {
copyFileToDir(targetDir, file, "");
}
}
}
/**
* 复制文件到指定目录。targetDir是目标目录,file是源文件名,newName是重命名的名字。
* @param targetFile
* @param file
* @param newName
*/
public static void copyFileToDir(String targetDir, File file, String newName) {
String newFile = "";
if (newName != null && !"".equals(newName)) {
newFile = targetDir + "/" + newName;
} else {
newFile = targetDir + "/" + file.getName();
}
File tFile = new File(newFile);
copyFile(tFile, file);
}
/**
* 复制文件。targetFile为目标文件,file为源文件
* @param targetFile
* @param file
*/
public static void copyFile(File targetFile, File file) {
if (targetFile.exists()) {
//System.out.println("文件" + targetFile.getAbsolutePath()+ "已经存在,删除该文件!");
//return;
targetFile.delete();
}
createFile(targetFile, true);
//System.out.println("复制文件" + file.getAbsolutePath() + "到" + targetFile.getAbsolutePath());
try {
int bytesum = 0;
int byteread = 0;
InputStream inStream = new FileInputStream(file); //读入原文件
FileOutputStream fs = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
fs.write(buffer, 0, byteread);
}
inStream.close();
/*
InputStream is = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) != -1) {
fos.write(buffer);
}
is.close();
fos.close();
*/
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String[] listFile(File dir) {
String absolutPath = dir.getAbsolutePath();
String[] paths = dir.list();
String[] files = new String[paths.length];
for (int i = 0; i < paths.length; i++) {
files[i] = absolutPath + "/" + paths[i];
}
return files;
}
public static void createFile(String path, boolean isFile) {
createFile(new File(path), isFile);
}
public static void createFile(File file, boolean isFile) {
if (!file.exists()) {
if (!file.getParentFile().exists()) {
createFile(file.getParentFile(), false);
} else {
if (isFile) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
} else {
file.mkdir();
}
}
}
}
public static void deleteDir(File dir) {
if (dir == null || !dir.exists() || !dir.isDirectory())
return; // 检查参数
for (File file : dir.listFiles()) {
if (file.isFile())
file.delete(); // 删除所有文件
else if (file.isDirectory())
deleteDir(file); // 递规的方式删除文件夹
}
dir.delete();// 删除目录本身
}
/***
* 写文件 , 这种输出方法可以忽略平台目录问题,在windows linux下都可完美运行
* @param content
* @param filename
* @throws Exception
*/
public static void WriteFile(byte[] content, String filename) {
File file = new File(filename);
try {
FileOutputStream fos = new FileOutputStream( filename );
try {
fos.write(content);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
在Java编程语言中,文件操作是非常基础且重要的一个部分。`java.io`包提供了大量的类来处理文件,其中最常用的就是`File`类。...熟练掌握`File`类和`FileUtil`类的使用,将使你在Java开发中事半功倍。
使用这样的工具类可以使代码更加简洁、易维护,同时减少出错的可能性。由于这个工具类是从网上收集的,可能包含了其他开发者的经验和优化,因此在使用前应仔细研究其源码,了解其工作原理和限制。 在实际项目中,...
Spring框架中的工具类可以帮助开发者更好地利用框架功能,如`BeanUtils`类用于Bean对象之间的属性复制,`ClassPathXmlApplicationContext`用于加载和管理Spring配置文件,还有`StringUtils`等Apache Commons Lang库...
4. **IO操作**:如FileUtil类,包含读写文件、目录操作等实用方法。 通过学习这一章的内容,开发者不仅可以提升代码质量,还能更好地组织和复用代码,使程序更易于维护和扩展。记住,一个好的实用类应该易于理解和...
Hutool提供了FileUtil工具类,支持文件的创建、删除、复制、移动等基本操作,还包含了文件的读写、查找、遍历等功能。例如,你可以轻松实现文件的复制: ```java FileUtil.copy(new File("源文件路径"), new File(...
文件操作在Java中是非常常见的需求,因此了解`FileUtil`类的实现可以帮助我们更好地管理项目中的文件资源。以下是一些可能包含在`FileUtil`类中的关键知识点: 1. **文件创建与删除**: - `createFile(String ...
Apache Commons是Java世界里一个非常重要的组件集合,它提供了大量的实用工具类,极大地简化了开发工作,提高了代码的可重用性和效率。 1. **Apache Commons介绍**: Apache Commons是Apache软件基金会的一个子...
5. **文件操作工具**:FileUtil类提供了对文件的读写、创建、删除等操作,有助于系统管理和维护资源,如存储用户上传的文件或系统配置文件。 6. **哈希表测试**:HashTableTest类可能是用于测试数据结构效率的,...
具体到`resource`解压到本地,这可能是Hutool提供了文件操作相关的工具,例如`FileUtil`类,能够帮助开发者方便地进行文件的读写、复制、删除、解压缩等操作。对于学习者来说,这不仅是一个使用工具,也是一个学习...
Hutool遵循"Single Responsibility Principle"(单一职责原则)和"Keep It Simple, Stupid"(保持简洁)的设计理念,每个工具类只做一件事,且做得足够好。 5. **实战应用** 在实际开发中,Hutool可以用于快速...
`FileUtil`类可能包括读写文件、创建删除目录、文件流转换等功能。 5. **权限管理**:随着Android版本的更新,权限管理越来越复杂。`PermissionUtil`可能提供了一种简单的方式来请求和处理运行时权限。 6. **设备...
《Hutool工具类官方文档全面解析》 Hutool是一个强大的Java工具包,它旨在简化常见的开发任务,提供了一套简洁、易用的API,让...在实际应用中,结合官方文档的指导,可以更好地利用Hutool来优化代码,提升项目质量。
数据返回 json 网页开发”意味着此项目利用了Struts2的Action类来处理上传请求,并且返回的数据格式是JSON,这对于现代Web应用的异步更新非常有用。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...
这个压缩包可能包含了一系列已经预封装好的函数或类,方便开发者在自己的项目中直接调用,避免重复造轮子。 【描述】:“基于PHP的工具包 一些操作封装.zip”的描述虽然简洁,但暗示了它可能包含了对文件操作、...
例如`FileUtil`和`XMLUtil`等工具类,它们通常提供了一组通用的功能,可以被其他应用程序调用。类库的主要特点在于其灵活性和可重用性,开发者可以根据需求选择性地使用这些类来扩展应用程序的功能。 2. **组件** ...
例如,`FileUtil`类提供了静态方法来执行这些任务,使开发者不必直接与`java.io.File`打交道,简化了文件操作的复杂性。 2. **IO流处理**: 流处理是Java中处理输入输出的重要部分。Hutool的`IoUtil`类对JDK的IO流...
1. **通用工具类**:项目可能包含了大量静态工具类,如DateUtil(日期时间处理)、StringUtil(字符串操作)、FileUtil(文件操作)等,这些工具类封装了常见的操作,使得开发者能够快速地进行数据转换、格式化等...