从事项目开发免不了和文件打交道,比如日志文件读写、文件压缩和解压、文件解析、文件上传和下载、文件导出等等。今天和大家一起重温文件操作的一些基础知识,并通过Demo的方式演示。
一、File类常用的API
这里,主要通过读取文件的方式练习对文件的基本操作:
package com.ldl.file;
import java.io.File;
public class FileTest {
public static void showDirAndFiles(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
System.out.println("Directory is null...");
return;
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("Dir:" + file2.getAbsolutePath());
showDirAndFiles(file2.getAbsolutePath());
} else {
System.out.println("File:" + file2.getAbsolutePath());
System.out.println("File----->>>" + file2.getName());
}
}
}
} else {
System.out.println("file is not exist...");
}
}
public static void main(String[] args) {
showDirAndFiles("D:\\FileTest");
}
}
运行效果如下(需自行创建相应目录(文件夹)和文件,以供测试):
这里我们使用了exists(),listFiles(),isDirectory(),getAbsolutePath(),getName()等基本API,相信读者查看上面的实例可以很轻松地掌握这些API的基本使用方法。
二、文件压缩和解压
需要说明的是,我们需要首先导入ant的jar包。
package com.ldl.file;
import java.io.File;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;
public class FileZipOrUnzip {
public static void zip(String zipFileName,String dirOrFilePathName) {
File file = new File(zipFileName);
File dirOrFileName = new File(dirOrFilePathName);
if (!dirOrFileName.exists()) {
System.out.println(dirOrFilePathName + "not exist...");
}
Project project = new Project();
Zip zip = new Zip();
zip.setProject(project);
zip.setDestFile(file);
FileSet fileSet = new FileSet();
fileSet.setProject(project);
fileSet.setDir(dirOrFileName);
zip.addFileset(fileSet);
zip.execute();
}
public static void unZip(String zipFile, String dirOrFilePath) {
File file = new File(zipFile);
if (!file.exists()) {
System.out.println(zipFile+"not exist...");
return;
}
File file2 = new File(dirOrFilePath);
if (file2.exists()) {
deleteDir(file2);
}
Project p = new Project();
Expand e = new Expand();
e.setProject(p);
e.setSrc(new File(zipFile));
e.setOverwrite(false);
e.setDest(new File(dirOrFilePath));
e.setEncoding("gbk");
e.execute();
}
public static boolean deleteDir(File dirOrFile) {
if (dirOrFile.isDirectory()) {
String[] dirAndFiles = dirOrFile.list();
for (int i=0; i<dirAndFiles.length; i++) {
boolean success = deleteDir(new File(dirOrFile, dirAndFiles[i]));
if (!success) {
return false;
}
}
}
return dirOrFile.delete();
}
public static void main(String[] args) {
//FileZipOrUnzip.zip("D:\\FileTest.zip", "D:\\FileTest");
FileZipOrUnzip.unZip("D:\\FileTest.zip", "D:\\FileTest2");
}
}
执行main方法,依次执行压缩和解压的方法,可以发现在我们指定的目录下生成了zip格式的文件和解压该文件新生成的目录或文件。表示执行文件压缩和解压文件操作成功!
本文仅仅用到了File类中少部分API,需要朋友们花些时间研究其他API(File类的API相对不多,大家可以编码实践以加深理解。),衷心希望各位在往后的实际项目中遇到文件处理相关的需求或问题,可以游刃有余的实现和解决!