File
//File.separator 为路径分隔符的常量,在以后使用路径是尽量使用File.separator
File file = new File("D:"+File.separator+"demo"+File.separator+"demo.txt");
if(file.exists()){
System.out.println("文件已存在,实现【删除】操作"+file.delete());
}else{
System.out.println("文件不存在,实现【创建】操作"+file.createNewFile());
}
}
问题:在使用File使用文件处理时,存在延迟。
文件目录操作
在很多情况下 有可能需要再子目录之中进行文件的创建,那么在java.io包中,必须保证有父目录的情况下才可以创建子文件。
File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
此时的操作路径里面追加了父目录定义,于是当前的程序代码在执行的时候就会产生错误
//程序执行结果:
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
因为必须在有父目录存在的情况下,才可以进行子文件的各种操作,创建或删除应该针对对于目录存在的情况下。
所以如果要进行目录的创建,则需要使用到File类中的如下几个方法
public boolean mkdir() :只创建单级目录
public boolean mkdirs() :创建多级目录
public String getParent():获取父路径的信息(String)
public File getParentFile():获取父路径的File实例
//父目录的创建
File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
if(!file.getParentFile().exists()) {//父路径不存在
file.getParentFile().mkdirs();//创建所有的父路径
}
if(file.exists()){
System.out.println("文件已存在,实现【删除】操作"+file.delete());
}else{
System.out.println("文件不存在,实现【创建】操作"+file.createNewFile());
}
}
合理的父目录操作
在多线程环境下可以考虑使用静态代码块的模式来完成,静态代码块的执行优先于主方法的执行
public class Demo {
private static File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
static{ //只执行一次,在执行一次的时候进行判断和目录的创建
if(!file.getParentFile().exists()) {//父路径不存在
file.getParentFile().mkdirs();//创建所有的父路径
}
}
public static void main(String[] args) throws Exception{
//File.separator 为路径分隔符的常量,在以后使用路径是尽量使用File.separator
if(file.exists()){
System.out.println("文件已存在,实现【删除】操作"+file.delete());
}else{
System.out.println("文件不存在,实现【创建】操作"+file.createNewFile());
}
}
}
获取文件信息
在File类中除了提供有基本的文件盒目录创建之外,也提供一些其他的操作信息,这些操作的方法如下:
public boolean canExecute():是否能执行
public boolean canRead():是否能读
public boolean canWrite():是否能写
public boolean isDirectory():当前路径是否为目录
public boolean isFile():当前路径是否为文件
public long lastModified():获取文件最后修改的日期
public long length():获取文件的大小
public String getName():获取文件的名字
public class Demo {
public static v oid main(String[] args) throws Exception{
File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
System.out.println("文件是否能执行"+file.canExecute());
System.out.println("文件是否能读"+file.canRead());
System.out.println("文件是否能写"+file.canWrite());
System.out.println("文件的大小"+file.length());
System.out.println("文件的名字"+file.getName());
System.out.println("文件最后的修改日期"+new Date(file.lastModified()));
System.out.println("当前路径是否为文件"+file.isFile());
System.out.println("当前路径是否为目录"+file.isDirectory());
}
}
/*运行结果:文件是否能执行true
文件是否能读true
文件是否能写true
文件的大小0
文件的名字demo.txt
文件最后的修改日期Wed Mar 10 18:16:29 CST 2021
当前路径是否为文件true
当前路径是否为目录false
*/
获取文件目录信息
使用File可以实现文件或者目录的操作,但是有时候可能会有一些子目录存在,现在要求可以将一个目录中的所有的子目录和文件全部列出,这个时候必须使用到File类中提供的一个重要方法:
public String[] list(FilenameFilter filter):描述的是子路径的信息(不包括父目录)
public File[] listFiles():列出所有的路径信息(File对象数组)
list()方法操作:
package IO.File;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Exception{
File file = new File("D:"+File.separator);
System.out.println(Arrays.toString(file.list()));
}
}
/*运行结果:
[$RECYCLE.BIN, 2345Downloads, 360安全浏览器下载, 360极速浏览器下载, 5b45ae2f0e2262b7df4186a9fb92a537, 654645, 6wanDownload]
*/
listFiles()方法如下:
package IO.File;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Exception{
File file = new File("D:"+File.separator);
System.out.println(Arrays.toString(file.listFiles()));
}
}
/*运行结果:
[D:\$RECYCLE.BIN, D:\2345Downloads, D:\360安全浏览器下载, D:\360极速浏览器下载, D:\5b45ae2f0e2262b7df4186a9fb92a537, D:\654645, D:\6wanDownload, D:\7457547]
*/
列出D盘所有文件路径:
package IO.File;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Exception{
File file = new File("D:"+File.separator);
listdir(file);
}
public static void listdir(File file) throws Exception{
if(file.isDirectory()) {
File result[] = file.listFiles();
if (result != null) {
for (int i = 0; i < result.length; i++) {
listdir(result[i]);
}
}
System.out.println(file);
}
}
}