File类的概述
File更应该叫做一个路径
文件路径或者文件夹路径
路径分为绝对路径和相对路径
绝对路径是一个固定的路径,从盘符开始
相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下
查看API指的是当前路径
文件和目录路径名的抽象表示形式
构造方法
* File(String pathname):根据一个路径得到File对象
* File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
* File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File类的创建功能
* public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
* public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
* public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
public static void main(String[] args) {
File file1 = new File("file1.txt");
System.out.println(file1.createNewFile()); //如果没有就创建,返回true
File file2 = new File("file2");
System.out.println(file2.createNewFile());
File dir1 = new File("dir1");
System.out.println(dir1.mkdir());
File dir2 = new File("dir2.txt"); //这样写是可以的,文件夹也是可以有后缀的
System.out.println(dir2.mkdir());
File dir3 = new File("dir3\\dir3_1");
System.out.println(dir3.mkdirs()); //创建多级目录
}
/*
* outPut:
* true
* true
* true
* true
* true
*/
创建前:
注意事项:
如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
File类的重命名和删除功能
* public boolean renameTo(File dest):把文件重命名为指定的文件路径
* public boolean delete():删除文件或者文件夹
重命名注意事项
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
删除注意事项
Java中的删除不走回收站。
要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
File类的判断功能
* public boolean isDirectory():判断是否是目录
* public boolean isFile():判断是否是文件
* public boolean exists():判断是否存在
* public boolean canRead():判断是否可读
* public boolean canWrite():判断是否可写
* public boolean isHidden():判断是否隐藏
public static void main(String[] args) {
File dir1 = new File("file1.txt");
System.out.println(dir1.isDirectory()); //判断是否是目录
File dir2 = new File("dir1");
System.out.println(dir2.isDirectory());
File dir3 = new File("E:\\");
System.out.println(dir3.isDirectory());
System.out.println("------");
System.out.println(dir1.isFile()); //判断是否是文件
System.out.println(dir2.isFile());
System.out.println("------");
File file1 = new File("file1.txt");
file1.setReadable(false);
System.out.println(file1.canRead()); //windows系统认为所有的文件都是可读的
file1.setWritable(false);
System.out.println(file1.canWrite()); //windows系统可以设置为不可写
System.out.println("------");
File file2 = new File("dir1");
System.out.println(file2.isHidden()); //判断是否是隐藏文件
System.out.println(file1.isHidden());
}
false
true
true
------
true
false
------
true
false
------
false
true
File类的获取功能
* public String getAbsolutePath():获取绝对路径
* public String getPath():获取路径
* public String getName():获取名称
* public long length():获取长度。字节数
* public long lastModified():获取最后一次的修改时间,毫秒值
* public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
* public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
public static void main(String[] args) throws IOException {
File file1 = new File("file1.txt");
File file2 = new File("E:/StudyHard/File/dir");
System.out.println(file1.getAbsolutePath()); //获取绝对路径
System.out.println(file2.getAbsolutePath());
System.out.println(file1.getPath()); //获取构造方法中传入路径
System.out.println(file2.getPath());
System.out.println(file1.getName()); //获取文件或者文件的名字
System.out.println(file2.getName());
System.out.println("--------");
System.out.println(file2.length()); //如果是目录定为0
System.out.println("--------");
Date d = new Date(file1.lastModified()); //文件的最后修改时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(sdf.format(d));
System.out.println("--------");
File dir = new File("E:/StudyHard/File");
String[] fileNames = dir.list(); //若dir为文件,则返回null
System.out.println(fileNames.length);
File[] files = dir.listFiles();
System.out.println(files.length);
}
E:\StudyHard\File\file1.txt
E:\StudyHard\File\dir
file1.txt
E:\StudyHard\File\dir
file1.txt
dir
--------
0
--------
2016年08月29日 18:27:29
--------
10
10
文件名称过滤器的概述及使用
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
public static void main(String[] args) throws IOException {
File dir = new File("E:\\");
String[] arr = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file = new File(dir,name);
return file.isFile() && file.getName().endsWith(".jpg");
}
});
System.out.println(arr.length);
}
简单源码分析(JDK1.8)
public String[] list(FilenameFilter filter) {
String names[] = list(); //list方法获取该目录下所有文件名
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();//创建一个List集合
for (int i = 0 ; i < names.length ; i++) {//遍历names
if (filter.accept(this, names[i])) {//根据我们创建的filter的条件(返回true or false)过滤
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);//最后将集合转换为数组
}
File小习
需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
public static void main(String[] args) throws IOException {
File dir = getDir();
printJavaFile(dir);
}
public static File getDir() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个文件夹路径");
while(true) {
String line = scanner.nextLine();
File dir = new File(line);
if(!dir.exists()) {
System.out.println("您录入的文件夹路径不存在,请重新录入");
} else if(dir.isFile()) {
System.out.println("您录入的是文件路径,请重新录入文件夹路径");
} else {
scanner.close();
return dir;
}
}
}
public static void printJavaFile(File dir) {
File[] subFiles = dir.listFiles();
for (File file : subFiles) {
if(file.isFile() && file.getName().endsWith(".java")) {
System.out.println(file);
} else if(file.isDirectory()){
printJavaFile(file);//如果是文件夹则递归调用
}
}
}