File类的对象可以代表文件/文件夹,并可以调用其提供的方法对象文件进行操作。
File对象既可以代表文件,也可以代表文件夹。
创建File对象,获取某个文件的信息
语法:
File 对象名 = new File("需要访问文件的绝对路径(如果在当前工程下可以用相对路径)")
判断是否是文件
可以用对象名.isFile()来判断当前路径下的东西是文件还是文件夹,是文件返回true,不是文件返回false
判断文件是否存在
可以用对象名.exists()来判断绝对路径所代表的文件在此位置是否存在,存在返回true,不存在返回false。
创建文件
如果绝对路径(相对路径)所代表的文件不存在,可以用对象名.creatNewFile来创造对应的文件
创建文件夹
语法:
如果绝对路径所代表的东西不存在,需要一个文件夹,可以用对象名.mkdir()来在对应位置创造对应文件夹。(只能创建一级文件夹,若是需要在文件夹里套文件夹即多级文件夹,需要用mkdirs)
可以用对象名.listFiles();获取当前路径下的所有一级文件对象,并使用文件夹数组接收,即File[ ]类型。
示例
package filedemo;
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) throws Exception {
//目标:创建File创建对象代表文件(文件/目录),搞清楚其提供的对文件进行操作的方法。
//1、创建File对象,去获取某个文件的信息
File f1 = new File("E:\\蓝桥杯\\【模板】01背包.cpp");
System.out.println(f1.length());
System.out.println(f1.getName());
System.out.println(f1.isFile());
System.out.println(f1.isDirectory());
//2、使用相对路径定位文件对象
//只要带盘符的都称为绝对路径
//相对路径:不带盘符,默认是到idea工程下直接寻找文件的,一般用来找工程下的项目文件。
File f2 = new File("day03-file-io\\src\\filedemo\\CodeBlossom");
System.out.println(f2.length());
//3、创建对象代表不存在的文件路径
File f3 = new File("E:\\text.txt");
System.out.println(f3.exists());
System.out.println(f3.createNewFile());
//4、创建对象代表不存在的文件夹路径
File f4 = new File("E:\\text"); //只能创建一级文件夹
System.out.println(f4.mkdir());
File f5 = new File("E:\\aaa\\bbbb\\cccc");
//System.out.println(f5.mkdir()); //多级文件夹,失败
//创建多级用mkdirs
System.out.println(f5.mkdirs());
//5、创建File对象代表存在的文件,然后删除它
File f6 = new File("E:\\text");
System.out.println(f6.delete()); //删除文件
//6、创建File对象代表存在的文件夹,然后删除它
File f7 = new File("E:\\aaa\\bbbb\\cccc");
System.out.println(f7.delete()); //删除文件夹(只能删空文件夹),删除后的文件不进入回收站
//7、获取某个目录下的全部一级文件名称
File f9 = new File("E:\\垃圾");
String[] names = f9.list();
for (String name:names)
{
System.out.println(name);
}
File[] files = f9.listFiles(); //获取一级文件对象,存到数组里
for (File file:files)
{
System.out.println(file.getAbsoluteFile()); //获取文件绝对路径
}
}
}
创建File对象的注意事项
package filedemo;
import java.io.File;
import java.util.Arrays;
public class FileDemo2 {
public static void main(String[] args) {
//目标:掌握File遍历一级文件对象的操作
//主调是文件或者路径不存在时,返回null
File dir = new File("E:\\蓝桥杯\\【模板】01背包.cpp");
//主调是空文件夹,返回长度为0的数组
File dir2 = new File("E:\\aaa\\bbbb");
//主调是一个有内容的文件夹,把里面所有一级文件和文件夹的路径放在File数组返回
//主调是一个文件夹且文件夹有隐藏文件时,将里面的所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
//主调是一个文件夹,但没有权限访问该文件夹时,返回null
File [] files = dir2.listFiles();
//System.out.println(files);
System.out.println(Arrays.toString(files));
}
}
项目实战:利用listFiles()方法来寻找目录下的某一个文件
package filedemo;
import java.io.File;
public class FileSearchDemoText {
public static void main(String[] args) {
//目标:找出D:盘下steam.exe的位置
try {
File dir = new File("D:\\");
searchFile(dir,"steam.exe");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 搜索文件
* @param dir 搜索的目录
* @param fileName 搜索的文件名称
*/
public static void searchFile(File dir,String fileName) throws Exception{
//1、判断极端情况
if (dir==null||!dir.exists()||dir.isFile())
{
return;//不搜索
}
//2、获取目录下的所有一级文件或者文件夹对象
File[] files = dir.listFiles();
//3、判断当前文件下是否存在一级文件对象,存在就遍历
if(files!=null && files.length>0)
{
//4、遍历一级文件对象
for (File file :files)
{
//5、判断此一级文件对象是不是文件
if (file.isFile()){
//6、判断文件名称是否和目标文件一致
if(file.getName().equals(fileName)) {
System.out.println("找到目标文件:"+file.getAbsolutePath());
Runtime r = Runtime.getRuntime();
r.exec(file.getAbsolutePath());
}
}else {
//7、如果当前一级文件对象是文件夹,则继续递归调用
searchFile(file,fileName);
}
}
}
}
}
当找到对应exe文件时,用getRuntime()方法获取一个虚拟机对象(java内的虚拟机可以用于启动exe文件)然后用exec方法打开对应exe文件。