File类型
File
1、什么是文件?
文件可以认为是相关记录或存放在一起的数据的集合
文件一般是存放在存储设备上的,例如:硬盘、光盘和移动存储设备等等
2、java.io包
JDK内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类;
程序中如果要使用到该包中的类,对文件或流进行操作,则必须显式地声明如下语句:import java.io.*
3、文件系统的一般文件组织形式
文件系统中由文件夹目录和数据文件构建成一颗树
4、java.io.File类的对象
可以表示文件和目录,在程序中一个File类对象可以代表一个文件或目录
当创建一个File对象后,就可以利用它来对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等等
需要注意的是,File对象并不能直接对文件内容进行读/写操作,只能查看文件的属性
5、File类的构造方法有4种重载方式
说 明 | |
---|---|
File(String pathname) |
- 提供给构造方法的路径可以指向一个具体的文件,这时候File对象能够操作这个文件的属性,也可以指向一个文件夹,这时候File对象操作的就是文件夹的属性
- 注意上例第二个对象的路径表达,由于在Java中“\”符号表示转意,因此如果使用”\”作为路径分割符,则实际需要编写“\”,当然一个更好的替代方法是使用Unix系统中常用的”/”作为路径分割,则不需要转意
- 特别注意,Java中的相对路径体系和我们日常所见的文件系统相对路径体系有较大的区别:
- 如果路径以“/”或“\”开头,则相对路径的根为当前项目所在磁盘的根目录(Unix没有磁盘分区的概念因此直接使用/,即文件系统的根作为相对路劲的根)
- 如果不以“/”开头,则相对路径的根为项目根目录,而不是当前类所在目录,这一点非常容易引起误区,因为类从属于某个包之后,类文件实际是位于项目中的某个子文件夹中的,如com.chinasoft.Hello这个类是位于项目中的com\chinasofti子文件夹中,如果在Hello类中构建一个File对象:FIle f = new File(“icss/chinasofti.txt”),那么这个文件位于项目根目录的icss子文件中,跟当前类自己的位置无关
File对文件的基础操作
1、File类型提供的常见操作方法
方 法 原 型 | 说 明 |
---|---|
boolean exists() | 判断文件是否存在,存在返回true,否则返回false |
boolean isFile() | 判断是否为文件,是文件返回true,否则返回false |
boolean isDirectory() | 判断是否为目录,是目录返回true,否则返回false |
String getName() | 获得文件的名称 |
String getAbsolutePath() | 获得文件的绝对路径 |
long length() | 获得文件的长度(字节数) |
boolean createNewFile() throws IOException | 创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉 |
boolean delete() | 删除文件,删除成功返回true,否则返回false |
File[] listFiles() | 返回文件夹内的子文件与子文件夹的数组 |
import java.io.File;
public class FileTest {
public static void main(String[] args) {
File file = new File("c:/tmp/data.txt");
//File file = new File("data.txt");
//File file = new File("/data.txt");
System.out.println("file是否存在:" + file.exists());
System.out.println("file是否为文件:" + file.isFile());
System.out.println("file是否为目录:" + file.isDirectory());
System.out.println("file的名称:" + file.getName());//data.txt
//new File("c:/tmp/data.txt"); //c:\tmp\data.txt
//new File("data.txt");//绝对路径是项目所在的路径+data.txt //C:\Idea\20220414\data.txt
//new File("/data.txt");//在Linux(unix)根路径+data.txt,在Window下,项目所在的盘符+data.txt //C:\data.txt
System.out.println("file的绝对路径:" + file.getAbsolutePath());
System.out.println("file的大小:" + file.length());//只对文件计算大小,目录都为0不能计算大小
}
}
2、创建文件删除遍历
查看代码
import java.io.File; import java.io.IOException; public class FileTest1 { public static void main(String[] args) throws IOException { File file = new File("C:/tmp/date1.txt"); boolean biNewFile = file.createNewFile();//创建 System.out.println(biNewFile); boolean blDelete = file.delete();//删除 System.out.println(blDelete); System.out.println("---------------------------"); File file1 = new File("C:\\App"); //返回目录内的子文件或者子目录的数组 File[] files = file1.listFiles(); for (File file2 : files) { System.out.println(file2.getName()); } //子目录或子文件名称 //String[] list = file1.list(); //for (String s : list) { // System.out.println(s); //} //file表示文件时候listFiles(),返回值是null, // 文件没有子目录或子文件,只有目录才有子目录或子文件 //File[] files1 = file.listFiles(); //for (File file11 : files1) { // System.out.println(file11.getName()); //} } }
3、创建目录
查看代码
import java.io.File; public class FileTest2 { public static void main(String[] args) { File file = new File("c:/tmp/abc"); //mkdir():父目录存在子目录才能创建成功,创建一个目录 boolean mkdir = file.mkdir(); System.out.println(mkdir); System.out.println(file.getParent());//获取父目录的名称 System.out.println(file.getParentFile());//获取父目录的file对象 File file1 = new File("c:/tmp/ab/cd/ef"); //mkdirs():父子目录一起创建,创建多层目录 boolean mkdirs = file1.mkdirs(); System.out.println(mkdirs); System.out.println(file1.getParent()); System.out.println(file1.getParentFile()); } }
打印某文件夹下所有文件的路径(包括子孙后代文件夹下的文件)
查看代码
import java.io.File; public class FileTest3 { public static void main(String[] args) { File file = new File("C:\\Idea"); printFile(file); } /** * 如果file是文件,打印路径, * 如果是目录,获取目录所有的file,遍历file * 是文件打印文件路径 * 是目录递归调用printfFile方法 * * @param file */ private static void printFile(File file) { if (!file.exists()) { return; } if (file.isFile()) { //file是文件,打印路径 System.out.println(file.getAbsolutePath()); } else { //file是目录,获取目录下所有file对象 File[] files = file.listFiles(); for (File f : files) { if (f.isFile()) { //file是文件,打印路径 System.out.println(f.getAbsolutePath()); } else if (f.isDirectory()) { //file是目录,递归调用printFile() printFile(f); } else { System.out.println("file非法类型!"); } } } } }