javaFile类理解,案例:遍历某目录中的文件,并打印出文件的绝对路径



从今天开始,我要将自己所学所想,参考API,将以讲义的形式,列出自己觉得重要的东西,加深印象!

-------------------------------------------------这是废话与正文的分割线----------------------------------------------------------------------------------------------------

File类,在java.io包中,在java语言中,它既可以表示文件,又可以表示目录。(正文中我直接称为文件,按照理解的来就好)

它主要的构造方法有:

1.new File(File parent,String child); //根据parent目录的全路径名(即parent.getAbsoultPath()),和child的文件名组成一个新的file

2.new File(String parent,String child);//和1的构造方法很类似 parent就是child文件的上一级目录·

3.new File(String pathName);//根据pathName(全路径名或相对路径名),去构造出新的file

4.new File(URI uri);//URI转为抽象的路径名,构建出一个新的file对象

这里我只总结常用的方法:

1.mkdir();//创建单级目录,如果是多级目录,则创建不成功,如:pathName = "D:/a/d"; 在D盘中没有a,b目录,这个就会创建失败,这就需要用到mkdirs();

    需要补充一点的就是,有没有发现我的pathName中路径用的是正斜杠,而我们所看到的路径都是反斜杠的,原因是在java中'\'是转义字符,有特殊的功能

    为了避免冲突,也可以写成pathName = "D:\\a\\d"; 因为"\\" 在java中输出的是'\';

2.mkdirs();可创建多级目录(包括单级),所以推举按使用。

3.isFile()与isDirectory()用来判断是否是文件|是否是文件夹,返回值为boolean值,在系统中,如果不是文件就是文件夹,所以这两个方法用一个接好了

4.getpath()文件的相对路径,相对顾名思义,它相对的是project项目程序来说的,如果在工程目录下,则输出文件名既可以了,如果在项目文件夹外,则输出的就是全路径,

和getAbsoultPath()一致了。

5.getAbsoultPath()文件的绝对路径,即文件的全路径

6.length()文件长度,即文件大小(字节)

7.getTotalSpace();获得分区的总大小,如这文件在D盘,则该函数返回的就是D盘的总大小

8.getUsableSpace;获得分区可用空间大小

9.list()返回String[]数组,该路径下所有文件与目录名。

10.listFiles():返回File[]数组,该路径下所有目录和文件的对象

11.listRoots();返回分区File[]对象,如你电脑里C:;D:;E:

File类主要理解记住这些方法基本上就可以了,如果有不懂可以再查看API就ok了!我们下面来用File类里面的方法去遍历某目录中的文件,

思路:

1.判断是文件还是目录,如果是文件,则打赢出absoultPath;

2.是目录则用递归,继续判断处理

不多说看代码与注释,理论再多还是得实践!

import java.io.File;
/**
 * 遍历某目录下的所有文件
 * @author Administrator
 *
 */
public class traverseDir {
	public static void main(String[] args) {
		String path = "D:/new";//这里填写你要遍历目录路径
		File file = new File(path);
		traverse(file);
	}
	
	public static void traverse(File file){
		//先对传入参数做判空处理
		if (null == file) {
			return;
		}
		//递归头,递归的出路
		if (file.isFile()) {
			System.out.println(file.getAbsolutePath());
			return;
		}
		
		File[] files = file.listFiles();
		//如果目录为空目录则要return,否则会空指针异常
		if (files == null) {
			return;
		}
		for (File file2 : files) {
			if (file2.isDirectory()) {
				traverse(file2);//递归
			}else {
				System.out.println(file2.getAbsolutePath());
			}
		}
		
	}
	
}


还补充一个例子就是,删除某路径下的文件及其子目录

import java.io.File;
/**
 * 删除临时文件及其内部文件夹
 * @author Administrator
 *
 */
public class DeleteFiles {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String path = "F:\\temp";//这里填写你文件路径
		File file = new File(path);
		delete(file, path);
	}

	public static void delete(File file,String path) {
		// 违反验证
		if (file == null) {
			return;
		}
		if (file.isFile()) {
			file.delete();
		}
		File[] mFiles = file.listFiles();
		if (mFiles == null) {
			return;
		}
		for (File file2 : mFiles) {
			delete(file2,path);//递归
		}
		
		//删除目录
		if (!file.getAbsolutePath().equals(path)) {
			file.delete();
		}

	}

}

注意:在写文件路径path时,最好是用反双斜杠“\\”,如果你用"/"在比较
file.getAbsolutePath().equals(path)
时,会发现匹配不上,那么删除子目录就不会成功!


结语:会飞时别忘了破茧时的痛楚!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章