File
文件和目录路径名的抽象表示形式 D:\JavaSE\path.txt
构造方法
public File(String pathname) pathname文件路径名
public File(String parent,String child) 父路径名 子路径名
public File(File parent,String child) 通过父文件对象和子文件名称构造文件对象
创建文件对象的三种方式
public static void main(String[] args) {
// 创建文件对象的三种方式
File f1 = new File("D:\\JavaSE\\a.txt");
System.out.println(f1);
File f2 = new File("D:\\JavaSE\\", "a.txt");
System.out.println(f2);
File f = new File("D:\\JavaSE");
File f3 = new File(f, "a.txt");
System.out.println(f3);
// 使用相对路径来创建文件路径对象
File f4 = new File("a.txt");
System.out.println(f4.getAbsolutePath());
}
文件的创建
public boolean createNewFile() 若文件不存在则创建新文件
public boolean mkdir() 创建目录
public boolean mkdirs() 创建目录及不存在的父目录
文件的删除
public boolean delete() 删除文件及空目录
文件的重命名
public boolean renameTo(File dest) 重命名为dest
注意: 非常重要
1.凡是操作文件的第一步必须创建文件路径对象指向需要操作的文件
2.文件路径中所有的父目录必须存在
创建文件的方式
public static void main(String[] args) throws IOException {
File f = new File("a.txt");
System.out.println("createNewFile: " + f.createNewFile());
// 在工程目录下创建 aaa/b.txt
// File f2 = new File("aaa/b.txt");
// System.out.println("createNewFile: " + f2.createNewFile());
File f2 = new File("aaa");
File f3 = new File("aaa/b.txt");
System.out.println("mkdir: " + f2.mkdir());
System.out.println("createNewFile: " + f3.createNewFile());
// 需求: 创建 xxx/yyy/zzz/c.txt
// File f4 = new File("xxx");
// File f5 = new File("xxx/yyy");
// File f6 = new File("xxx/yyy/zzz");
// File f7 = new File("xxx/yyy/zzz/c.txt");
// System.out.println(f4.mkdir());
// System.out.println(f5.mkdir());
// System.out.println(f6.mkdir());
// System.out.println(f7.createNewFile());
File f4 = new File("xxx/yyy/zzz");
File f5 = new File(f4, "c.txt");
System.out.println(f4.mkdirs());
System.out.println(f5.createNewFile());
}
文件的删除
public boolean delete() 删除文件及空目录
这里删除带内容的文件夹需要使用递归删除 暂时等学完文件遍历再来删除
文件的重命名
public boolean renameTo(File dest) 重命名为dest
如果两个文件的父目录相同,那么表示更名
如果两个文件的父目录不同,那么表示剪切 + 更名
代码示例
public static void main(String[] args) {
File f = new File("xxx/yyy/zzz/c.txt");
System.out.println(f.delete());
File f2 = new File("xxx/yyy/zzz");
System.out.println(f2.delete());
File f3 = new File("xxx");
System.out.println(f3.delete());
// 将b.txt修改为x.txt
// File f4 = new File("aaa/b.txt");
// File dest = new File("aaa/x.txt");
// System.out.println(f4.renameTo(dest));
File f4 = new File("aaa/x.txt");
File dest = new File("ok.txt");
System.out.println(f4.renameTo(dest));
}
文件的相关功能方法
public boolean isFile() 是否文件
public boolean isDirectory() 是否目录
public boolean canRead() 是否可读
public boolean canWrite() 是否可写
public boolean exists() 是否存在
public boolean isHidden() 是否隐藏
public long length() 长度
public String getAbsolutePath() 绝对路径
public String getPath() 定义的路径
public String getName() file名字
public long lastModified() 最后一次修改时间
代码示例
public static void main(String[] args) {
File f = new File("xxx/yyy/d.txt");
// 4.36 1576917374756
System.out.println("isFile: " + f.isFile());
System.out.println("isDirectory: " + f.isDirectory());
System.out.println("canRead: " + f.canRead());
System.out.println("canWrite: " + f.canWrite());
System.out.println("exists: " + f.exists());
System.out.println("isHidden: " + f.isHidden());
System.out.println("length: " + f.length()); // 9
System.out.println("getAbsolutePath: " + f.getAbsolutePath());
System.out.println("getPath: " + f.getPath());
System.out.println("getName: " + f.getName());
System.out.println("lastModified: " + f.lastModified());
Date d = new Date(1576917374756L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(d);
System.out.println(dateStr);
}
文件的遍历
public String[] list() 返回file下的文件和目录名称(字符串)
public File[] listFiles() 返回file下的文件和目录(文件)
public String[] list(FilenameFilter filter) 根据filter过滤返回file下文件和目录名称
public File[] listFiles(FileFilter filter) 根据filter过滤返回file下文件和目录
代码示例
public static void main(String[] args) {
// 获取到 com.yy.filedemo目录下所有的文件
File f = new File("src/com/yy/filedemo");
// String[] fileNames = f.list();
// System.out.println(Arrays.toString(fileNames));
/*File[] files = f.listFiles();
for (File file : files) {
String fileName = file.getName();
if (fileName.endsWith(".txt")) {
System.out.println(fileName);
}
}*/
File[] files = f.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
// if (f.getName().endsWith(".txt")) {
// return true;
// } else {
// return false;
// }
return f.isFile() && f.getName().endsWith(".txt");
}
});
for (File file : files) {
System.out.println(file);
}
}
判断com.yy.filedemo目录下是否有后缀名为.java的文件,
如果有,统计该类型文件的个数并输出此文件名称
public static void main(String[] args) {
System.out.println(getFileCount2(new File("src/com/yy/filedemo")));
}
public static int getFileCount(File srcFolder) {
int count = 0;
File[] files = srcFolder.listFiles();
for (File f : files) {
if (f.isFile() && f.getName().endsWith(".java")) {
count++;
System.out.println(f.getName());
}
}
return count;
}
public static int getFileCount2(File srcFolder) {
return srcFolder.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
return f.isFile() && f.getName().endsWith(".java");
}
}).length;
}