File类
1. 文件路径
java
import java.io.File;
public class DemoFile1 {
public static void main(String[] args) {
// 选择路径时,从当前磁盘的根路径开始
String path = "D:\\workspace\\java\\data\\students.txt";
File file = new File(path);
System.out.println(file.exists()); // true 当前路径被读取到了...
/*
TODO 为了解决代码的移植问题 需要使用相对路径
相对路径是从当前项目的根路径开始的
*/
// String path2 = ".\\data\\students.txt";
// String path2 = "data\\students.txt";
// String path2 = "data\students.txt"; // 错误,单个的\表示有转义 具有特殊含义 \\ 可以消除其转义表示一个 \
String path2 = "data/students.txt"; // 上述斜杠编写麻烦于是添加了 反斜杠
File file2 = new File(path2);
System.out.println(file2.exists()); // true
String path3 = "data";
String fileName ="students.txt";
File file3 = new File(path3, fileName);
System.out.println(file3.exists());
}
}
2. 文件、目录的创建、删除和重命名
java
import java.io.File;
import java.io.IOException;
public class DemoFile2 {
public static void main(String[] args){
/*
创建功能
public boolean createNewFile() 创建文件
public boolean mkdir() 创建目录
public boolean mkdirs() 创建多级目录
删除功能
public boolean delete() 删除路径中最后一层的目录或文件
重命名功能
public boolean renameTo(File dest)
*/
String filePath = "data/data.txt";
File file = new File(filePath);
if (!file.exists()) {
try {
// 创建文件
file.createNewFile(); // 直接调用会报错,错误的指示是在方法名之上
} catch (IOException e) {
throw new RuntimeException(e);
}
}
String dirPath = "data/dir";
File file1 = new File(dirPath);
// file1.createNewFile();
file1.mkdir(); // 创建目录时,要保证当前目录下没有同名的文件或目录
String dirPath2 = "data/dir1/next_dir";
File file2 = new File(dirPath2);
// file2.mkdir(); // 没有生效,next_dir目录必须要现有 dir1目录
file2.mkdirs();
file2.delete();
//注:传入的是一个指明了路径的匿名File对象
file1.renameTo(new File("data/dir2"));
}
}
3. File类方法
java
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class DemoFile3 {
public static void main(String[] args) {
/*
判断功能
public boolean isDirectory()
public boolean isFile()
public boolean exists()
public boolean canRead()
public boolean canWrite()
public boolean isHidden()
*/
File dirFile = new File("data/dir1");
System.out.println(dirFile.isDirectory()); // true
File dataFile = new File("data/data.txt");
System.out.println(dataFile.isFile());
System.out.println(dataFile.canRead()); //
System.out.println(dataFile.canWrite());
// 对于Linux平台 隐藏文件表示为 .文件名
System.out.println(new File("data/.file").isHidden()); // true
/*
基本获取功能
public String getAbsolutePath()
public String getPath()
public String getName()
public long length()
public long lastModified()
*/
System.out.println(dataFile.getAbsoluteFile()); // 全路径
System.out.println(dataFile.getPath()); // 相对路径
System.out.println(dataFile.getName()); // 文件名
System.out.println(dataFile.length()); // 文件长度
System.out.println(dataFile.lastModified()); // 最后一次修改时间 => 1714381721534 毫秒
// 格式化展示 yyyy-MM-dd HH:mm:ss
Date date = new Date(dataFile.lastModified());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(date));
/*
高级获取功能
public String[] list()
public File[] listFiles()
*/
File data = new File("data");
//File.list()返回的是当前文件目录下所有文件和目录的文件名,返回的是String数组
String[] list = data.list();
System.out.println(Arrays.toString(list)); // [.file, data.txt, dir1, dir2, score.txt, students.txt]
// 数组 File
//data.listFiles():得到的是一个 File 类型的数组,返回的是"data"目录中的文件和目录
File[] files = data.listFiles();
for (File file : files) {
System.out.println(file.getAbsoluteFile());
}
System.out.println("----------------");
File[] files2 = data.listFiles();
for (File file : files2) {
String path = file.getAbsolutePath();
//endsWith():用于测试字符串是否以指定的后缀结束。
if (path.endsWith(".jpg")) {
System.out.println(path);
}
}
}
}
4. File类中list()方法
java
package com.shujia.day11_SQL_Exception_File;
import java.io.File;
import java.io.FilenameFilter;
public class Demo11File {
public static void main(String[] args) {
File data = new File("data");
/*
TODO 源码:
public String[] list(FilenameFilter filter) {
String names[] = list();
// 如果当前 names是空 或者过滤器没有定义 则返回空的
if ((names == null) || (filter == null)) {
return names;
}
// 创建新的ArrayList
List<String> v = new ArrayList<>();
// 遍历所有的data中的文件及目录的名称
for (int i = 0 ; i < names.length ; i++) {
// 调用自定义过滤器中的accept方法 将当前的 data对象传入第一个参数 names[i] 表示每一个文件名
if (filter.accept(this, names[i])) {
// 如果判断结果为true 将当前文件名添加到 ArrayList 中
v.add(names[i]);
}
}
// 将ArrayList转成数组
return v.toArray(new String[v.size()]);
}
*/
String[] list = data.list(
new FilenameFilter() {
// accept 表示接收一个元素的数据 类型为 File
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg");
}
}
);
for (String s : list) {
System.out.println(s);
}
}
}