文件操作常用方法:
//注:在使用中为了我们程序的可移植性和健壮性,建议使用 这个常量
System.out.println(File.separator); //打印结果 \
/**
* 1:创建一个新的文件夹(包括创建多层目录文件夹)
* boolean mkdir() 创建此抽象路径名指定的目录。
* boolean mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
*/
String folderName1 = "E:" + File.separator + "/firstFolder1";
String folderName2 = "E:" + File.separator + "/firstFolder2/test/hello";
File file1 = new File(folderName1);
file1.mkdir(); //创建文件夹 在E:/firstFolder1
File file2 = new File(folderName2); //创建文件夹 在/firstFolder2/test/hello
file2.mkdirs();
/**
* 2:创建一个新的文件
*/
String fileName = "E:" + File.separator + "/firstFile.txt";
File file = new File(fileName);
try {
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
/**
* 3:删除一个文件夹或文件
*/
String folderName = "E:" + File.separator + "/firstFolder1";
File file = new File(folderName);
if (file.exists()) {
file.delete();
} else {
System.out.println("文件夹不存在!");
}
/**
* 4:列出指定目录的全部文件(包括隐藏文件)
* 使用file.listFiles(),列出完整路径,返回的是File的数组
*/
File file = new File("E:" + File.separator);
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
System.out.println(file2);
}
/**
* 5:判断是文件夹还是文件
*/
String folderName = "E:" + File.separator + "/firstFolder1";
String fileName = "E:" + File.separator + "/firstFile.txt";
File f1 = new File(folderName);
File f2 = new File(fileName);
if (f1.isDirectory()) {
System.out.println("is Directory");
}
if (f2.isFile()) {
System.out.println("is File");
}
String path = "E:\\workspace";
File file1 = new File(path);
findAllFf(file1);
}
/**
* 6:查找指定目录的文件夹和文件
*/
public void findAllFf(File f) {
if (f != null) {
if (f.isDirectory()) {
System.out.println(f);
File[] listFiles = f.listFiles();
for (File file : listFiles) {
findAllFf(file);//递归
}
} else {
System.out.println(f);
}
}
}
/**
* 7:文件移动
*/
File newName = new File("E:\\zh\\zh1.txt");
File oldName = new File("E:\\zh.txt");
oldName.renameTo(newName);//E:\\zh.txt移动至E:\\zh\\zh1.txt
文件下载
//浏览器强制下载,不需要指定路径。默认浏览器存储路径。
@RequestMapping("upload")
public void fileuplpad(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 设置浏览器强制下载
response.setContentType("application/force-download");
String fileName = URLEncoder.encode("需求列表", "UTF-8") + ".txt";
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
OutputStream fos = response.getOutputStream();
File file = new File("E:\\java task\\zhl.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
System.out.println(len);
System.out.println(new String(bytes));
}
fos.flush();//强制刷出
//一般情况下是:先打开的后关闭,后打开的先关闭
fos.close();
fis.close();
}
文件拷贝(工具类)
public class FileUtil {
private static Logger logger = LoggerFactory.getLogger(FileUtil.class);
//文件夹拷贝(参数文件夹路径---path)
public static void copyDir(String srcPath, String destPath) {
File srcFile = new File(srcPath);
File destFile = new File(destPath);
copyDir(srcFile, destFile);
}
//文件夹拷贝(参数文件夹---file)
public static void copyDir(File srcFile, File destFile) {
copyDirDetail(srcFile, destFile);
}
//拷贝文件夹细节
public static void copyDirDetail(File srcFile, File destFile) {
if (srcFile.isFile()) { //文件直接复制
FileUtil.copyFile(srcFile, destFile);
} else if (srcFile.isDirectory()) {//目录
destFile = new File(destFile, srcFile.getName());
if(!destFile.isDirectory()){
destFile.mkdirs();
}
//获取下一级目录|文件
for (File sub : srcFile.listFiles()) {
copyDirDetail(sub, destFile);
}
}
}
//文件拷贝(参数文件路径---path)
public static void copyFile(String srcPath, String destPath){
File srcFile = new File(srcPath);
File destFile = new File(destPath);
copyFile(srcFile, destFile);
}
//文件拷贝(参数文件---file)
public static void copyFile(File srcFile, File destFile) {
if (!srcFile.isFile()) {
System.out.println("目标文件不存在");
return;
}
if (!destFile.isDirectory()) {
destFile.mkdirs();
}
destFile = new File(destFile, srcFile.getName());
try {
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
fos.flush();//强制刷出,必须吗?close之前不是自动调用flush方法吗
fos.close();
fis.close();
/* FileReader fr = new FileReader(srcFile);
FileWriter fw = new FileWriter(destFile);
char[] chars = new char[1024];
int len = 0;
while((len = fr.read(chars)) !=-1){
fw.write(chars,0,len);
}
fw.close();
fr.close();*/
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件复制失败");
}
}
}