JAVA - File类

JAVA中,获取文件属性以及删除、重命名文件等工作由File类来完成。

类加载

import java.io.File;

一个File类实例表示一个目录/文件,但是需要注意,创建一个File实例并不会在机器上创建一个文件,无论文件是否存在,都可以创建任意文件名的file实例,可以调用exists()方法来判断文件是否存在。

File类包含许多获取文件属性、删除文件等方法,但是,File类不属于流对象,不能读写文件内容 但是可以作为参数传递给流对象的构造方法为了完成I/O操作,需要使用JAVA I/O类创建对象来完成。

File类路径path的写法

* path以'/'或者'\\'开头的是以项目所在的硬盘路径为基础路径

* path以字母开头的,是以项目的路径为基础路径即:System.getProperty("user.dir")

以绝对路径做为路径

最好用“/”因为JAVA是跨平台的。“\”(在JAVA代码里应该是“\\”)是Windows环境下的路径分隔符,Linux和Unix下都是用“/”而在Windows下也能识别“/”所以最好用“/”

File类构造方法

·  File(String pathname)该构造方法通过将给定路径名字字符串类型的路径(路径可以是目录的绝对地址,也可以是相对地址,更可以是文件,下同,都称之为路径转换为抽象路径来创建一个新File实例

·  File(String parent, String child)该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File实例

File  file  =  new File("D:/myword","word.txt");

·  File(File parent, String child)该构造方法根据parent抽象路径名和child路径名字符串创建一个新File实例

File类的创建方法

以下方法,若目标路径在创建前已存在,则均会返回false,创建成功返回true

boolean createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false

File file = new File("D:\\TEST.txt");
System.out.print(file.createNewFile());

* 注意也只能创建文件,并不能创建目录,即只要给定的路径中包含不存在的文件夹,就会创建失败

boolean mkdir()创建文件夹

File file = new File("D:\\TEST\\");
System.out.print(file.mkdir());

* 注意只能创建一级目录,若给定的路径中包含多级目录,则创建失败

boolean mkdirs()创建多级目录

* 注意即便最后创建失败,但是也可能创建了一些中间目录

* 注意上面两个方法如果要创建的目录已经存在,不再重新创建,都返回false,只有新建目录返回true

File类的删除方法

boolean delete()删除指定目录或者文件,成功返回true

* 删除文件或者一个空文件夹,不能删除非空文件夹

File file = new File("D:\\TEST\\");
System.out.print(file.delete());

void deleteOnExit()JVM退出前删除,用于删除临时文件,无返回值 即使发生异常也不受影响

File类的判断方法

boolean exists()判断构造方法中封装的目录或者文件是否存在

boolean isAbsolute()判断构造方法中封装的路径(目录或文件)是不是绝对路径,是返回真;即使该路径不存在也可以进行判断

boolean isDirectory()判断是不是目录,若是返回true,若不是或不存在,则为false

boolean isFile()判断是不是文件,若是返回true,若不是或不存在,则为false

* 注意上面两个方法需要先判断路径是否存在,如果路径不存在,则返回false,即不存在的File类对象既不是文件也不是目录

boolean isHidden()判断封装的路径(目录或文件)是不是隐藏属性是返回true

boolean canExcute()测试应用程序是否可以执行此抽象路径名表示的文件;若不存在,则为false

File类的获取方法

String getName()获取封装路径(目录或文件)最后部分的名字

* 此方法不会判断路径是否存在,使用之前最好判断,如果是文件的话当然获取到的也就是文件的名字了

String getParent() 返回封装路径的父路径

* 注意封装的是相对路径时如果相对路径没有父路径,就会出错

File getParentFile()返回封装路径的父路径的File对象

String getAbsolutePath() 返回封装路径的绝对路径,与路径是否存在没关系

File getAbsoluteFile() 返回封装路径的绝对路径的File对象

long length()获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L

File类的其他方法

renameTo(File dest)重命名由此抽象路径名表示的文件

* 如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名

* 如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切(若给定的路径中的文件夹不存在,则失败)

* renameTo方法用于对物理文件名称进行修改,但是并不会修改File对象的name属性

File file = new File("D:\\happy.txt");
System.out.print(file.getName());
System.out.print(file.renameTo(new File("D:\\TEST.txt")));
System.out.print(file.getName());

File类的目录操作

static File[] listRoots()静态的方法,列出系统所有的根目录,光驱和移动设备存储也会算进去

File[] roots = File.listRoots();        
for(File f: roots){
System.out.println(f);
}

String[] list()返回File构造方法封装的路径下的所有文件和目录名,包含隐藏文件

* 对于文件这样操作会返回null

File dir = new File("C:\\");
String[] files = dir.list();
for(String s: files){
	System.out.println(s);
}

File[] listFiles()返回File构造方法封装的路径下的所有文件和目录名,返回File对象,带全路径。

* 注意返回为空和返回为null的意义是不同的

  若不包含(符合条件的)文件,返回为空

  但是如果返回为null,则表明调用方法的File对象可能不是一个目录,或者发生了IO错误

File类的常见应用

递归列出指定目录下的文件或文件夹,包含子目录中的内容

 
 
import java.io.File;

public class Test {
    public static void main(String[] args){
    	listAll("D:\\迅雷下载");
    }

    public static void listAll(String path) {
    	File dir = new File(path);
		if(dir.exists()) {
			if(dir.isDirectory()) {
				File[] files = dir.listFiles();
				for(File s: files){
			        if(s.isDirectory()) {
			        	System.out.println(s.getAbsolutePath());
			        	listAll(s.getAbsolutePath());
			        }
			        else
			        	System.out.println(s.getAbsolutePath());
			     }
			}
			else if(dir.isFile())
				System.out.println(dir.getAbsolutePath());
		}
		else
			System.out.println("The path doesn't exist!");
    }
}

删除非空文件夹

import java.io.File;

public class Test {
    public static void main(String[] args){
    	deleteAll("D:\\TEST");
    }
	
    public static void deleteAll(String path) {
	File dir = new File(path);
	if(dir.exists()) {
		if(dir.isDirectory()) {
			File[] files = dir.listFiles();
			for(File s: files)
				deleteAll(s.getAbsolutePath());
		}
            dir.delete();
	}		
	else
		System.out.println("The Path doesn't Exist!");
    }
}

猜你喜欢

转载自blog.csdn.net/bupa900318/article/details/80404163