file

299 阅读4分钟

这是我参与更文挑战的第26天,活动详情查看: 更文挑战

文件和目录路径名的抽象表示。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可

File类是io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等。File类的对象主要用来获取文件本身的一些信息,如文件所在目录、文件的长度、文件读写权限等。数据流可以将数据写入到文件中,而文件也是数据流最常用的数据媒体

File类的构造函数

 File(String pathname) :将一个字符串路径封装成File对象
 File(String parent,String child):传入一个父级路径和子级路径
 File(File parent,String child):传入一个File类型的父级路径和子级路径

File 类是对文件系统的映射 并不是硬盘上真实的文件 所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会在硬盘中创建文件

 // File file = new File("C:\\c.txt");
 // File file = new File("C:\\","c.txt");
// File file = new File(new File("C:\\"),"d.txt");
  if (!file.exists()){
  file.createNewFile();}

如果需要创建文件需要以下操作:

判断映射的文件是否真实存在 file.exists() //true存在 false不存在
如果存在即可直接操作, 否则需要调用 file.createNewFile() 创建真实文件
但是以上方式只会适用创建文件本身,不包括父文件的创建(如果父文件不存在)
所以一般需要对父文件存在与否作判断
File parent = file.getParentFile() // 获取父文件
if( !parent.exists() ) parent.mkdirs(); //创建所有父文件夹

File类创建和删除功能

boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false   boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false boolean delete():删除文件或者删除单级文件夹

File类的判断功能

boolean exists():判断指定路径的文件或文件夹是否存在 boolean isAbsolute():判断当前路路径是否是绝对路径 boolean isDirectory():判断当前的目录是否存在 boolean isFile():判断当前路径是否是一个文件 boolean isHidden():判断当前路径是否是隐藏文件

File类的获取功能和修改名字功能

  File getAbsoluteFile():获取文件的绝对路径,返回File对象   String getAbsolutePath():获取文件的绝对路径,返回路径的字符串   String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径   File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径   String getName():获取文件或文件夹的名称   String getPath():获取File对象中封装的路径   long lastModified():以毫秒值返回最后修改时间   long length():返回文件的字节数   boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径

File类的其它获取功能

String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称 File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称 static File[] listRoots():获取计算机中所有的盘符

案例

输出指定目录下所有的java文件名(包含子目录)

public class RecurrenceTest {
public static void main(String[] args) {
File f = new File("src");
//File f = new File("src\\com\\itheima_01\\RecurrenceDemo.java");
method(f);
}
public static void method(File file) {
if(file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判断是否是文件对象
if(f.isFile()) {
if(f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
else if(f.isDirectory()){
//是一个目录对象
method(f);
}
}
}
}

删除指定的目录(包含子目录)

//输出指定目录下的所有java文件名(不包含子目录)
public static void method2(File file) {
if(file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判断是否是文件对象
if(f.isFile()) {
if(f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
}
}
}
}                                                          

删除指定的目录(包含子目录)
public class RecurrenceTest2 {
public static void main(String[] args) {
File f = new File("d:\\a");
method(f);
}
//删除指定目录下所有文件和目录
public static void method(File file) {
if(file.isDirectory()) {
//干掉自己所有的子文件和子目录
//获取所有的子文件和子目录
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()) {
//直接干掉他
System.out.println(f.getName());
f.delete();
}
else if(f.isDirectory()) {
//继续查看是否还有文件和子目录
method(f);
}
}
//干掉自己
System.out.println(file.getName());
file.delete();
}
}
}