java.io包下代表平台无关的文件和目录。也就是说如果希望在程序中操作文件或目录都可以通过File类来完成。
File可以新建、删除、和重命名文件和目录。但File不能访问文件本身,如果需要访问文件内容,则需要 I/O。
File类的实例表示一个文件或者目录(文件夹)。
构造一个File实例并不是创建这个目录或文件,而是该路径的一个抽象,它可能真实存在也可能不存在。(就是指向这个文件或目录)。
Windows系统中:盘符目录就是根目录,D:、E:
Linux系统中:/就是根目录,从/开始的路径就是绝对路径
相对于不同的路径,同样的相对路径,表达的是不同的路径。
Dos命令行中:相对于当前路径(Dos命令行所在的路径),a/b/c.txt。
Eclipse中:相对于当前工程的根目录。
File(File parent, String child) |
File(String pathname) |
File(String parent, String child) |
File(URI uri) |
代码示例:
import java.io.File;
public class 构造方法 {
public static void main(String[] args) {
File file1 = new File("F:/0715大数据第1阶段/aaa.txt"); // 绝对路径指向文件
File file2 = new File("F:/0715大数据第1阶段","aaa.txt");// 绝对路径指向文件
File path1 = new File("F:/0715大数据第1阶段"); // 绝对路径指向目录(文件夹)
File file3 = new File(path1,"aaa.txt"); //绝对路径指向文件
File f = new File("test.txt"); //相对路径 -----> 相对当前项目的根目录
}
}
boolean createNewFile():创建当前File对象所描述的路径的文件
boolean mkdir():创建当前File对象所描述的路径的文件夹(如果父级路径不存在,那么不会自动创建父级路径)
boolean mkdirs():创建当前File对象所描述的路径的文件夹(如果父级路径不存在,那么自动创建父级路径)
|
演示过程:
①我先创建一个空的文件夹。
②编辑代码,创建文件。
public class 创建方法 {
public static void main(String[] args) throws Exception {
File f1 = new File("F:\\FILEandIO");
f1.createNewFile();
File f2 = new File(f1,"1.txt");
f2.createNewFile();
}
}
结果:
③在目前目录创建文件夹。
public class 创建方法 {
public static void main(String[] args) throws Exception {
File f1 = new File("F:\\FILEandIO");
f1.createNewFile();
File f2 = new File(f1,"a");
f2.mkdir();
}
}
结果:
④一次性创建多层文件夹。
public class 创建方法 {
public static void main(String[] args) throws Exception {
File f1 = new File("F:\\FILEandIO");
f1.createNewFile();
File f2 = new File(f1,"a/c/d");
f2.mkdirs();
}
}
delete():删除调用者描述的文件或者文件夹 |
注意事项
1、delete在删除文件夹的时候,只能删除空文件夹
2、delete方法不走回收站
public class 创建方法 {
public static void main(String[] args) throws Exception {
File f1 = new File("F:\\FILEandIO");
f1.createNewFile();
File f2 = new File(f1,"a/c/d");
f2.delete();
File f3 = new File(f1,"a/c");
f3.delete();
File f4 = new File(f1,"a");
f4.delete();
File f5 = new File(f1,"1.txt");
f5.delete();
}
}
renameTo(File dest) 调用者是当前的文件或者文件夹的路径对象 参数是变化之后的文件或者文件夹的路径对象 |
注意事项
如果在同一个文件夹下,修改路径,就是重命名。
如果在不同文件夹下,修改路径,就是剪切。
重命名:
public class 创建方法 {
public static void main(String[] args) throws Exception {
//记录进行处理的文件夹目录
File f = new File("F:\\FILEandIO");
//记录创建文件
File f1 = new File(f,"1.txt");
//创建文件
f1.createNewFile();
//记录和f1同在一个目录下的第二个文件
//下面代码等执行过上面的再解开注释执行下面的
/*File f2 = new File(f,"2.txt");
f1.renameTo(f2);*/
}
}
执行前后:
剪切:
public class 重命名 {
public static void main(String[] args) throws Exception {
File f = new File("F:\\FILEandIO");
File ff = new File(f,"重命名");
ff.mkdir();
File f1 = new File(ff,"a");
File f2 = new File(ff,"b");
f1.mkdir();
f2.mkdir();
File f3 = new File(f1,"1.txt");
f3.createNewFile();
//到这里我们是创建了一个文件夹下面有两个子文件夹,其中a文件夹中有一个1.txt的文件。
//这里不光是剪切,更重要的是同时进行了重命名
File f4 = new File(f2,"2.txt");
f3.renameTo(f4);
}
}
exists():判断当前调用者File对象,是否存在 isFile():判断当前调用者File对象,是否是文件 isDirectory():判断当前调用者File对象,是否是文件夹
|
public class 判断 {
public static void main(String[] args) {
File f =new File("F:\\FILEandIO/重命名");
File f1 = new File(f,"b");
File f2 = new File(f1,"2.txt");
System.out.println(f1.exists());
System.out.println(f1.isFile());
System.out.println(f2.isFile());
System.out.println(f1.isDirectory());
System.out.println(f2.isDirectory());
}
}
结果:
true
false
true
true
false
getAbsolutePath():获取当前File对象的绝对路径 getPath():获取的就是在构造方法中封装的路径 getName():获取最底层的简单的文件或者文件夹名称(不包含所造目录的路径) length():获取文件的字节个数 该方法被文件File对象调用时,返回的是文件的字节个数 该方法被文件夹File对象调用时,返回的数据是不确定的 String[] list():获取当前文件夹下的所有文件和文件夹的名称,到一个字符串数组中 File[] listFiles():获取当前文件夹下的所有文件和文件夹的File对象,到一个File对象数组中
|
import java.io.File;
public class 获取功能 {
public static void main(String[] args) {
File f = new File("F:\\\\FILEandIO/重命名");
File f1 = new File(f,"b/2.txt");
//获取绝对路径
System.out.println(f1.getAbsolutePath());
//获取构造方法中的路径
System.out.println(f1.getPath());
//最底层的文件夹名
System.out.println(f1.getName());
//获取文件内容的长度
System.out.println(f1.length());
//用一个字符串数组接收当前目录下所有目录
String[] s = f.list();
for(String ss:s)
System.out.println(ss);
//用File对象数组接受当前目录下所有目录
File[] ff = f.listFiles();
for(File fff:ff)
System.out.println(fff);
}
}
结果:
F:\FILEandIO\重命名\b\2.txt
F:\FILEandIO\重命名\b\2.txt
2.txt
0
a
b
F:\FILEandIO\重命名\a
F:\FILEandIO\重命名\b
练习:输出指定目录下包括子文件夹里的所有目录和文件。
import java.io.File;
public class 练习 {
public static void main(String[] args) {
File file = new File("F:\\FILEandIO");
printFile(file);
}
public static void printFile(File file){
File[] fs = file.listFiles();
for(File f:fs){
if(f.isFile()){ // 是文件
System.out.println(" 文件:"+f.getName());
}else{ // 是目录
System.out.println("目录:"+f.getName());
printFile(f);
}
}
}
}