java.io.File类: 用来描述计算机中 文件/文件夹 的路径。
File(String pathname) //根据形参创建File对象,所表示的文件或文件夹可以存在,也可以不存在
File(String parent, String child)
File(File parent, String child)
public static String pathSeparator: 系统中多个路径的分隔符 //windows ;
public static String separator: 系统中一个路径中多个名称之间的分隔符号 //windows \
public String getAbsolutePath() 返回此File的绝对路径名字符串。
public String getPath() 返回构造方法中的字符串路径
public String getName() 返回此File表示的文件或文件夹的名称。
public long length() 返回由此File表示的文件的长度。
public File getParent() 返回此File的父目录
public File getParentFile() 返回此File的父目录File对象
public long getFreeSpace() 返回该分区上 空闲空间 long 字节
public long getUsableSpace() 返回该分区上 空闲空间 long 字节 ,会检查写等权限,更准确
public long getTotalSpace() 返回该分区上的总空间
package com.alibaba.file_test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Project\\JavaAdvenced\\day12_review\\src\\com\\alibaba\\file_test\\a.txt");
//系统分隔符
System.out.println(File.separator); // \
System.out.println(File.pathSeparator); // ;
System.out.println(file.getAbsolutePath()); //D:\Project\JavaAdvenced\day12_review\src\com\alibaba\file_test\a.txt
System.out.println(file.getName()); //a.txt
System.out.println(new File("abc").getPath());//abc
System.out.println(file.getParent()); //D:\Project\JavaAdvenced\day12_review\src\com\alibaba\file_test
File parentFile = file.getParentFile();
System.out.println(file.getCanonicalPath());//路径标准格式 D:\Project\JavaAdvenced\day12_review\src\com\alibaba\file_test\a.txt
file = new File("d:");
System.out.println(file.getFreeSpace()); //该分区上 空闲空间 long 字节
System.out.println(file.getUsableSpace()); //该分区上 空闲空间 long 字节 ,会检查写等权限,更准确
System.out.println(file.getTotalSpace()); //该分区上的 总空间
}
}
public boolean exists() :
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
package com.alibaba.file_test;
import java.io.File;
public class EstimateMethodTest {
public static void main(String[] args) {
File file = new File("");
boolean exists = file.exists(); //判断此抽象路径表示的文件/文件夹是否存在
boolean directory = file.isDirectory(); //判断此抽象路径表示的 是文件夹吗 不存在也是false
boolean file1 = file.isFile(); //判断此抽象路径表示的 是文件吗 不存在也是false
}
}
public boolean createNewFile() 该名称的文件不存在时,才会创建一个新的空文件。
public boolean mkdir() : 创建由此File表示的目录。
public boolean mkdirs() : 创建由此File表示的目录,创建多级文件夹
public boolean delete() : 只能删除掉文件和空文件夹,java中删除动作不走回收站。
public String[] list() 获取当前目录下的所有的目录和文件的字符串数组
public File[] listFiles() 获取当前目录下的所有的目录和文件的File对象数组
public static void showDir(File srcDir,int count) {
System.out.println("|-" + srcDir.getName());
File[] files = srcDir.listFiles();
count++;
for (File file : files) {
System.out.print(printTab(count));
if (file.isFile()) {
System.out.println("|-" + file.getName());
} else {
showDir(file,count);
}
}
}
public static long calculateDirSize(File srcDir) {
long size = 0;
File[] files = srcDir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
size += calculateDirSize(file);
} else {
size += file.length();
}
}
return size;
}
//使用 commons-io-2.11.0包的工具类,工具类忒好了
public static void copyDirUtil(File srcDir, File desDir) throws IOException {
FileUtils.copyDirectory(srcDir, desDir); //底层也用的递归
}
//自己递归实现
public static void copyDir(File srcDir, File desDir) throws IOException {
if (!desDir.exists()) {
desDir.mkdir();
}
File newDir = new File(desDir, srcDir.getName());
newDir.mkdir();
File[] files = srcDir.listFiles();
if (files == null || files.length == 0) {
return;
}
for (File file : files) {
if (file.isDirectory()) {
copyDir(file, newDir);
} else {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(newDir, file.getName()));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
}
}
}
//使用 commons-io-2.11.0包的工具类,工具类忒好了
public static void cutDirUtil(File srcDir, File desDir) throws IOException {
FileUtils.moveDirectory(srcDir,desDir);
/*源码
先复制,再删除
*/
}
//自己实现,在复制后紧接着删除源文件
public static void cutDir(File srcDir, File desDir) throws IOException {
if (!desDir.exists()) {
desDir.mkdir();//删除源文件夹
}
File newDir = new File(desDir, srcDir.getName());
newDir.mkdir();
File[] files = srcDir.listFiles();
if (files == null || files.length == 0) {
srcDir.delete();
return;
}
for (File file : files) {
if (file.isDirectory()) {
cutDir(file, newDir);
} else {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(newDir, file.getName()));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
//读写完后,删除源文件
file.delete();
}
}
srcDir.delete();
}
public static boolean deleteDir(File srcDir) {
File[] files = srcDir.listFiles();
if (files == null || files.length == 0) {
return srcDir.delete();
}
for (File file : files) {
if (file.isDirectory()) {
deleteDir(file);
} else {
file.delete();
}
}
return srcDir.delete();
}
//将符合条件的 文件路径-文件名 存到map集合中
public static Map<File, String> serchTypeFile(File srcDir, String desFileSuffix) {
Map<File, String> map = new HashMap<>();
File[] files = srcDir.listFiles();
if (files == null) {
return map;
}
for (File file : files) {
if (file.isDirectory()) {
map.putAll(serchTypeFile(file, desFileSuffix));
} else {
if (file.getName().toLowerCase().endsWith(desFileSuffix)) {
map.put(file.getAbsoluteFile(), file.getName());
}
}
}
return map;
}
public static void copyTypeDir(File srcDir, File desDir, String desFileSuffix) throws IOException {
Map<File, String> map = serchTypeFile(srcDir, desFileSuffix);
Set<Map.Entry<File, String>> entries = map.entrySet();
for (Map.Entry<File, String> entry : entries) {
File key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "---" + value);
/*挑选代码
...
*/
//给文件加上时间戳,防止文件重名.
//这里有点问题,时间戳到毫秒值,如果电脑够快,可能两个同名文件加的时间戳一样,会造成文件的覆盖,唉~~
//用(1)(2)的话,可以解决,但每次都要遍历新文件夹,好麻烦啊。
String[] names = key.getName().split("\\."); //正则表达式的关系
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
String format = sdf.format(new Date());
String s = names[0] + "(" + format + ")." + names[1];
File file = new File(desDir, s);
FileUtils.copyFile(key,file);
}
}
B站黑马视频