JAVA之File对象

概述

  提供操控操作系统文件的一个类,是文件和目录路径名的抽象表示,

两种路径

  1. 绝对路径: 从盘符开始逐渐靠近你想得到的那个位置,最真实
  2. 相对路径: 从当前位置出发,去靠近你想得到的那个位置。
    特殊的:./ 代表当前位置 . ./ 代表返回上一级

构造方法

构造方法描述
File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例
File(File parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例

样例

package main;

import java.io.File;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 方法一:File(String pathname)
		File f1 = new File("C:\\aaa");
		System.out.println(f1);
		
		// 方法二:File(String parent, String child)
		File f2 = new File("C:\\aaa", "aaa.txt");
		System.out.println(f2);
		
		// 方法三:File(File parent, String child)	
		File f3 = new File(new File("C:\\aaa"), "bbb\\aaa.txt");
		System.out.println(f3);
		
	}
}

运行结果:
C:\aaa
C:\aaa\aaa.txt
C:\aaa\bbb\aaa.txt

常用静态方法

返回值静态方法描述拓展
StringpathSeparator当多个路径组合在一起使用的分隔符linux:冒号( : ) windows:分号( ; )
Stringseparator某一个路径文件名称之间路径分隔符linux:反斜杠( / ) windows:正斜杠( \ )

样例

package main;

import java.io.File;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
	 	// 产生原因: 提高可移植性。跨平台的运行不报错
		// pathSeparator   
		// 我们在配置jdk的时候,在win7 以下的版本都是 分号或者冒号 隔开
		System.out.println(File.pathSeparator);
		
		// separator
		// 提高可移植性的地点,获取路径的时候,可利用静态方法
		File f = new File("C:" + File.separator + "aaa" + File.separator + "bbb" + File.separator + "aaa.txt");
		System.out.println(f);
	}
}

常用方法

获取功能方法

返回值方法描述
StringgetPath()返回构造函数参数路径
StringtoString()返回构造函数参数路径
StringgetAbsolutePath()返回绝对路径
StringgetName()返回由此抽象路径名表示的文件或目录的名称
Stringlength()返回由此抽象路径名表示的文件的字节大小

获取功能方法样例

package main;

import java.io.File;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		File f1 = new File("C:\\aaa\\aaa.txt");
		
		// 从输出样例,可以得出。这三者是一样的。
		// 因此为了简便,以后可就直接打印对象名,因为重写了toString方法
		System.out.println(f1.getPath());
		System.out.println(f1.toString());
		System.out.println(f1);
		System.out.println(f1.getAbsolutePath());		// 返回是绝对路径
		System.out.println(f1.getName());				// 返回是最后一级 目录或者文件
		System.out.println(f1.length());				// 返回是文件的大小。重点:只有文件有大小,文件夹无大小
		
		System.out.println("====================");
		File f2 = new File("aaa.txt");
		System.out.println(f2.getPath());
		System.out.println(f2.toString());
		System.out.println(f2);
		System.out.println(f2.getAbsolutePath());		// 返回是绝对路径
		System.out.println(f2.getName());				// 返回是最后一级 目录或者文件
		System.out.println(f2.length());				// 返回是文件的大小。重点:只有文件有大小,文件夹无大小
		
		
		
	}
}

运行结果:
C:\aaa\aaa.txt
C:\aaa\aaa.txt
C:\aaa\aaa.txt
C:\aaa\aaa.txt
aaa.txt
18
====================
aaa.txt
aaa.txt
aaa.txt
D:\java\MyEclipse\workspace(20200726)\Test\aaa.txt
aaa.txt
0

判断功能方法

返回值方法描述
booleanexists()测试该路径是否存在
booleanisFile()测试该路径是否是文件
booleanisDirectory()测试该路径是否是目录( 文件夹 )

判断功能方法样例

package main;

import java.io.File;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		File f1 = new File("C:\\aaa\\aaa.txt");		// 存在路径
		File f2 = new File("C:\\aaa\\aa.txt");		// 不存在路径
		File f3 = new File("C:\\aaa");				// 存在路径
		File f4 = new File("C:\\aa");				// 不存在路径
		System.out.println(f1.exists());
		System.out.println(f2.exists());
		System.out.println("============");
		
		
		// 从这下面两个案例可以明白,要想判断是否是目录还是文件。
		// 前提条件必须是文件存在形式
		// 并且如果路径是书写对的情况 。两个方法是:互斥关系
		
		System.out.println(f1.isFile());
		System.out.println(f2.isFile());
		System.out.println("============");
		System.out.println(f3.isDirectory());
		System.out.println(f4.isDirectory());
		
			
	
		
	}
}

运行结果:
true
false
============
true
false
============
true
false

创建删除文件、文件夹方法

返回值方法描述
booleancreateNewFile()如果该路径文件不存在,则创建一个该路径的空文件
booleandelete()删除由此抽象路径名表示的文件或目录
booleanmkdir()创建单级目录
booleanmkdirs()创建多级目录

创建删除文件、文件夹方法样例

package main;

import java.io.File;
import java.io.IOException;

public class Main {

	public static void main(String[] args)  {
		// TODO Auto-generated method stub
		
		
		File f1 = new File("C:\\bbb\\bbb.txt");
		File f2 = new File("C:\\ccc");
		System.out.println(f1.exists());
		System.out.println(f2.exists());
		
		try {
			System.out.println(f1.createNewFile());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("要想创建创建文件,其上一级必须能索引到");
		}
		try {
			System.out.println(f2.createNewFile());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("不能创建目录哟");
		}	
		System.out.println("=====================");
		File f3 = new File("C:\\aaa");
		File f4 = new File("C:\\aaa\\aaa.txt");
		// 如果要提前想删除目录,必须保证该目录下,已经没有文件了
		System.out.println(f3.delete());
		System.out.println(f4.delete());
		System.out.println(f3.delete());
		System.out.println("=====================");
		
		File f5 = new File("C:\\bbb\\bbb\\bbb.txt");
		File f6 = new File("C:\\bbb");
		
		System.out.println(f6.mkdir());
		System.out.println(f5.mkdirs());

	}
}

运行结果:
false
false
要想创建创建文件,其上一级必须能索引到
不能创建目录哟
=====================
false
true
true
=====================
true
true

遍历文件、文件夹方法

返回值方法描述
String[ ]list()命名由此抽象路径名表示的目录中的文件和目录
String[ ]listFiles()表示由该抽象路径名表示的目录中的文件
File[ ]list(FilenameFilter filter)命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录
File[ ]listFiles(FilenameFilter filter)表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录

遍历文件、文件夹方法样例

package main;

import java.io.File;
import java.io.FilenameFilter;

public class Main {

	public static void main(String[] args)  {
		// TODO Auto-generated method stub
		
		// 方法一
		File f1 = new File("C:\\bbb");
		String[] s1 = f1.list();
		for(String i : s1) {
			System.out.println(i);
		}
		System.out.println("================");
		// 方法二
		File f2 = new File("C:\\bbb");
		File[] s2 = f2.listFiles();
		for(File i : s2) {
			System.out.println(i.getAbsolutePath());
		}
		System.out.println("==============");
		// 后面  两种方法
		// 参数列表是一个过滤器。
		// 可以根据自己的需求,过滤掉你不需要,你不想要的文件或目录
		File f11 = new File("C:\\bbb");
		
		// 该过滤器只有一个方法。  accept。重写规则即可
		// 比如这里,我只想要 .txt 结尾的文件
		String[] s11 = f11.list(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				System.out.println("dir是一个目录:" + dir + "\t" + "name是一个文件:" + name);
				if(name.endsWith(".txt"))
					return true;
				return false;
			}
		});
		for(String i : s11) {
			System.out.println(i);
		}
		System.out.println("================");
		File f22 = new File("C:\\bbb");
		File[] s22 = f22.listFiles(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				
				System.out.println("dir是一个目录:" + dir + "\t" + "name是一个文件:" + name);
				if(name.endsWith(".txt"))
					return true;
				return false;
			}
		});
		for(File i : s22) {
			System.out.println(i.getAbsolutePath());
		}
		System.out.println("==============");
		
	}
}

运行结果:
aaa
AAA.txt
bbb
bbb.txt
main.java
================
C:\bbb\aaa
C:\bbb\AAA.txt
C:\bbb\bbb
C:\bbb\bbb.txt
C:\bbb\main.java
==============
dir是一个目录:C:\bbb name是一个文件:aaa
dir是一个目录:C:\bbb name是一个文件:AAA.txt
dir是一个目录:C:\bbb name是一个文件:bbb
dir是一个目录:C:\bbb name是一个文件:bbb.txt
dir是一个目录:C:\bbb name是一个文件:main.java
AAA.txt
bbb.txt
================
dir是一个目录:C:\bbb name是一个文件:aaa
dir是一个目录:C:\bbb name是一个文件:AAA.txt
dir是一个目录:C:\bbb name是一个文件:bbb
dir是一个目录:C:\bbb name是一个文件:bbb.txt
dir是一个目录:C:\bbb name是一个文件:main.java
C:\bbb\AAA.txt
C:\bbb\bbb.txt
==============

递归遍历指定路径下所有文件实例

PS:当然你可以遍历,也可以删除。但一定不要做蠢事哟 !

package file;

import java.io.File;

public class RecursionFile {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		f(new File("D:\\unity3D\\激活+汉化") , 0);
	}
	
	public static void f(File f,int t) {
		for(int j = 0; j < t ;j++) {
			System.out.print("\t");
		}
		System.out.println(f.getAbsolutePath());
		File[] file = f.listFiles();
		for(File i : file) {
			if(i.isDirectory()) {
				
				f(i,t + 1);
				
			}else if ( i.isFile()) {
				for(int j = 0; j <= t  ;j++) {
					System.out.print("\t");
				}
				System.out.println(i.getAbsolutePath());
			}
			
		}
		
		
		
	}
	
	

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值