JAVA File类

什么是File类?

File类是java.io包下的一个类,可以用来操作文件和目录,比如新建,删除,重命名文件或文件夹,读取文件或文件夹的基本信息(文件最后修改时间等等),但是File不能访问文件内容,必须用IO流才可以访问或修改文件内容.

正式开始之前,先做一个名称的约定

File类的构造方法

重点:

1.File对象的路径只是一个路径的映射(抽象路径),并不是真的有对应的文件夹和文件了,文件夹和文件必须要用File对象调用方法生成才行.

2.如果pathname没有写绝对路径(比如"C:/test/readme.txt"),而是相对路径("test/readme.txt"),那么File的路径就会映射到项目的根目录下.

3.创建对象时,路径分隔符用正斜杠(/)或者反斜杠(\\)都可以,会自动换成反斜杠(\)的,不能直接在代码中写反斜杠(\)!  tips:Java中\\等于\,因为是转义符啦~~~

public File(String pathname) : 传入抽象路径,生成一个File对象 例如:pathname="C:/test/readme.txt"

public File(String parent, String child) : 例:parent="C:/test/",   child="readme.txt"; parent不能指定到文件,只能到文件夹

public File(File parent, String child) : 类似上边的

public File(URI uri) : 传入URI,生成File对象,什么是URI : 可以用File对象的toURI()方法生成一个URI自己看看

随便举个例子

File file = new File("C:/test/readme.txt");
//创建File对象时并不会生成对应路径的目录和文件(夹).

各种get方法

public String getName() : 获取文件名(即 '文件(夹)')

public String getParent() : 获取目录(原路径去除掉getName()的值)

public File getParentFile() : 获取以getParent()为路径的File对象

public String getPath() : 原样获取File对象的路径(写什么返回什么)

public String getAbsolutePath() : 返回绝对路径

public String getCanonicalPath() : 返回绝对路径的同时,简化路径名(去除掉./或者../这种类型的路径, 不明白的话看下边示例)

public File getAbsoluteFile() : 获取以getAbsolutePath()为路径的File对象

public File getCanonicalFile() : 获取以getCanonicalPath()为路径的File对象

File file = new File("aaa/bbb/ccc/ddd/.././abc.txt");
file.getParentFile().mkdirs();  //创建abc.txt父级的目录
file.createNewFile();  //创建abc.txt文件
System.out.println(file.getName());  //abc.txt
System.out.println(file.getParent());  //aaa\bbb\ccc\ddd\..\.
System.out.println(file.getParentFile());  //aaa\bbb\ccc\ddd\..\.
System.out.println(file.getPath());  //aaa\bbb\ccc\ddd\..\.\abc.txt
System.out.println(file.getAbsolutePath());  //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\ddd\..\.\abc.txt
System.out.println(file.getCanonicalPath());  //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\abc.txt
System.out.println(file.getAbsoluteFile());  //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\ddd\..\.\abc.txt
System.out.println(file.getCanonicalFile());  //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\abc.txt

//File重写了toString()方法,所以打印file对象时是打印file的路径
//注意,file对象的路径用的是正斜杠,而打印出来的是反斜杠,因为windows路径是用反斜杠分隔的,

判断相关方法

public boolean isAbsolute()

public boolean isDirectory()

public boolean isFile()

public boolean isHidden()

不做赘述

增删改相关方法

重点

1.mkdir()和mkdirs()不会识别文件后缀,统统创建成文件夹!

2.createNewFile()不管有没有后缀,统统创建成文件!

3.delete()删除文件夹时如果文件夹内有文件或文件夹,则不能删除

4.对于所有增删改方法,操作的都是路径中的文件(夹),比如 "C:/aaa/bbb/ccc.txt",ccc.txt前边的统统算作是目录!

public boolean mkdir() : 按照路径(path)创建文件夹("C:/aaa/bbb/abc.txt" 如果aaa或bbb目录不存在,则方法不起作用,如aaa,bbb都存在,才能创建abc.txt文件夹)

public boolean mkdirs() : 按照路径(path)创建文件夹("C:/aaa/bbb/ccc/abc.txt" 不管aaa, bbb, ccc文件夹是否存在,都按照路径正常创建文件夹,缺少的文件夹都会一并创建)

public boolean createNewFile() : 创建路径中的文件,如果目录不存在,则报错找不到指定路径

public boolean delete() : 删除文件(夹) (删除文件:直接删除    删除文件夹:如果文件夹下有文件或文件夹,则方法不起作用)

public void deleteOnExit() : 程序退出时再删除

public boolean renameTo(File dest) : 把文件(夹)重命名成dest路径中文件(夹)的名字,如果是不同目录的路径,则不起作用.

List方法

public String[] list() : 把路径下所有的文件或文件夹的名字做成String数组并返回

public String[] list(FilenameFilter filter) : 跟list()方法相同,但只取FilenameFilter过滤后的内容

public File[] listFiles() : 用路径下所有的文件或文件夹的路径,做成一个File数组,并返回

public File[] listFiles(FilenameFilter filter) : 跟listFiles()方法相同,但只取FilenameFilter过滤后的内容

public File[] listFiles(FileFilter filter) : 跟listFiles()方法相同,但只取FileFilter过滤后的内容

FileFilter 和FilenameFilter是函数式接口,可以用Lambda表达式

 

 

其他方法

public URI toURI()

设置是否可读,可执行,可写入,最近修改时间等方法省略...

递归清空文件夹

	//先在C:/test/目录下创建好多个文件夹和文件
        File deleteFile = new File("c:/test/");
	@Test
	public void fileDelete() {
		deleteAllFiles(deleteFile);
		return;
	}
	public void deleteAllFiles(File file) {
		File[] listFiles = file.listFiles();
		for (int i = 0; i < listFiles.length; i++) {
			if(listFiles[i].isDirectory()) {
				deleteAllFiles(listFiles[i]);
			}
			listFiles[i].delete();
		}
	}

  

posted @ 2019-04-20 21:03  Kaneha  阅读(318)  评论(0编辑  收藏  举报