java.io 类File

java.io.File是文件和目录的重要类

(JDK6及以前是唯一的一个可以表示文件和目录的类)

File类是建立Java程序和系统文件的联系的类。

1 File类的两个常量:路径分隔符和名称分隔符

打开cmd,输入path,可以看到C:\Program Files (x86)\Common Files\Oracle\Java\javapathC:\WINDOWS\system32 用***分号***分隔开,这个分号就是路径分隔符;各个层次之间用***反斜线***分割,这个反斜线就是名称分隔符

C:\Users\Administrator>path
PATH=C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;
	@Test
	public void test00() {
	    //路径分隔符
		System.out.println(File.pathSeparator);
		System.out.println(File.pathSeparatorChar);
		//名称分隔符
		System.out.println(File.separator);
		System.out.println(File.separatorChar);
	}

windows系统上运行结果:

;
;
\
\

2 文件路径

2.1 文件路径的常见使用形式

2.1.1 使用转义字符,不推荐使用
		// 使用转义字符\,不推荐使用
		String path1 = "F:\\JavaDemo\\1.txt";

文件分割符(系统属性 file.separator)是**\**
从windows文件管理器复制路径:H:\jee\workspace\io
在java等编程语言中,反斜杠\具有转义的特殊作用,比如\t表示制表符,\n表示回车,
所以如果你想在字符串里使用\的本意,就要用双反斜杠,即\\才表示
具体来说,要把你路径里的反斜杠改成“\\”.
H:\jee\workspace\io变为H:\\jee\\workspace\\io
或者是改为/。
H:\jee\workspace\io变为H:/jee/workspace/io

2.1.2 使用常量separator,不推荐使用,常用于动态生成,可跨平台
		// 常用于动态生成,可跨平台,不推荐使用。
		String path2 = "F:" + File.separator + "JavaDemo" + File.separator + "1.txt";
2.1.3 使用/,推荐使用
		//推荐使用
		String path3 = "F:/JavaDemo/1.txt";

2.2 文件的相对路径与绝对路径

举例:
绝对地址:我在中华人民共和国湖北省武汉市洪山区洛南街道129号。(地球文明的人可以按照这个地址找到我)
相对地址:我在华中师范大学对面。(相对地址是指我相对华师的位置,要找到我首先要找到华师的位置)

马克思主义哲学认为,世界上一切事物既包含有相对的方面,又包含有绝对的方面,任何事物都既是绝对的,又是相对的。
如果有地球以外文明,这个绝对地址也是错误的。这个绝对地址也只是相对地球上的人。

2.2.1 绝对路径构造File实例(对象)

code:

		File file1 = new File("F:/JavaDemo/2.jpg");
		System.out.println(file1.getName());
		System.out.println(file1.getPath());

console:

2.jpg
F:\JavaDemo\2.jpg
2.2.2 相对路径构造File实例(对象)

相对路径名必须使用取自其他路径名的信息进行解释。
默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。
code:

System.out.println(System.getProperty("user.dir"));

console:

G:\eclipsephoton\javaio
①指定相对路径

使用两种不同的构造器构造File实例
code:

		//相对路径
		String parent = "F:/javaDemo";
		String name = "3.jpg";
		File file2 = new File(parent,name);
		File file3 = new File (new File(parent),name);
		System.out.println(file2.getName());
		System.out.println(file2.getPath());
		System.out.println(file3.getName());
		System.out.println(file3.getPath());

console:

3.jpg
F:\javaDemo\3.jpg
3.jpg
F:\javaDemo\3.jpg

②使用默认相对路径

在路径中如果没有盘符(windows操作系统)或者没有根路径(其他操作系统),则以user.dir为默认的相对路径

code:

		//默认相对路径
		System.out.println(System.getProperty("user.dir"));
		File file4 = new File("test.txt");
		System.out.println(file4.getName());
		System.out.println(file4.getPath());
		System.out.println(file4.getAbsolutePath());

console:

G:\eclipsephoton\javaio
test.txt
test.txt
G:\eclipsephoton\javaio\test.txt

3 File类常用方法

3.1 获取文件名及路径

(1)getAbsolutePath,获取完整路径
	// 获取文件名及其相关路径
		File file1 = new File("test.txt");//默认路径构造
		File file2 = new File("G:/eclipsephoton/javaio/test.txt");//绝对路径构造
		String parent = "G:/eclipsephoton/javaio";
		String name = "test.txt";
		File file3 = new File(parent,name);//指定相对路径构造,可以看做是绝对路径构造

		// 获取完整路径
		System.out.println("getAbsulutePath:");
		System.out.println(file1.getAbsolutePath());
		System.out.println(file2.getAbsolutePath());
		System.out.println(file3.getAbsolutePath());
		System.out.println("================");
G:\eclipsephoton\javaio\test.txt
G:\eclipsephoton\javaio\test.txt
G:\eclipsephoton\javaio\test.txt
(2)getName,获取文件名
		File file1 = new File("test.txt");//默认路径构造
		File file2 = new File("G:/eclipsephoton/javaio/test.txt");//绝对路径构造
		String parent = "G:/eclipsephoton/javaio";
		String name = "test.txt";
		File file3 = new File(parent,name);//指定相对路径构造,可以看做是绝对路径构造
		// 获取文件名
		System.out.println("getName:");
		System.out.println(file1.getName());
		System.out.println(file2.getName());
		System.out.println(file3.getName());
		System.out.println("================");
getName:
test.txt
test.txt
test.txt
================
(3)getParent,获取文件所在目录
		File file1 = new File("test.txt");//默认路径构造
		File file2 = new File("G:/eclipsephoton/javaio/test.txt");//绝对路径构造
		String parent = "G:/eclipsephoton/javaio";
		String name = "test.txt";
		File file3 = new File(parent,name);//指定相对路径构造,可以看做是绝对路径构造
		// 获取所在目录
		System.out.println("getParent:");
		System.out.println(file1.getParent());
		System.out.println(file2.getParent());
		System.out.println(file3.getParent());
		System.out.println("================");
getParent:
null
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
================
(4)getPath,获取文件,如果file是绝对路径则返回绝对路径,如果是默认相对路径则返回文件名
		File file1 = new File("test.txt");//默认路径构造
		File file2 = new File("G:/eclipsephoton/javaio/test.txt");//绝对路径构造
		String parent = "G:/eclipsephoton/javaio";
		String name = "test.txt";
		File file3 = new File(parent,name);//指定相对路径构造,可以看做是绝对路径构造
		// 获取路径getPath(	),如果file是绝对路径则返回绝对路径,如果是默认相对路径则返回文件名
		System.out.println("getPath:");
		System.out.println(file1.getPath());
		System.out.println(file2.getPath());
		System.out.println(file3.getPath());
		System.out.println("================");
getPath:
test.txt
G:\eclipsephoton\javaio\test.txt
G:\eclipsephoton\javaio\test.txt
================

3.2 判断

准备数据:

		File file1 = new File("test.txt");// 文件存在
		File file2 = new File("test1.txt");// 文件不存在
		
		String parent = "G:/eclipsephoton/javaio";
		String name = "test.txt";
		File file3 = new File(parent, name);
		
		
		File file4 = file3.getParentFile();// 文件夹
		System.out.println(file4);
		
		File file5 = new File("G:/eclipsephoton/javaio/test.txt");
		File file6 = file5.getParentFile();// 文件夹
		System.out.println(file6);

file1文件不存在
file2文件存在
file4文件夹存在

(1)exist():文件是否存在
		System.out.print("file1是否存在:");
		boolean bool = file1.exists();
		if (bool) {
			System.out.println("文件存在");
		} else {
			System.out.println("文件并不存在");
		}

		// 文件是否存在
		System.out.print("file2是否存在:");
		boolean bool2 = file2.exists();
		if (bool2) {
			System.out.println("文件存在");
		} else {
			System.out.println("文件并不存在");
		}

		// 文件是否存在
		System.out.print("file4是否存在:");
		boolean bool3 = file4.exists();
		if (bool3) {
			System.out.println("文件夹存在");
		} else {
			System.out.println("文件夹并不存在");
		}
file1是否存在:文件并不存在
file2是否存在:文件存在
file4是否存在:文件夹存在
(2)canWrite(),canRead() : 是否能读写
		// 
		System.out.print("file1是否能写:");
		System.out.println(file1.canWrite());
		System.out.print("file1是否能读:");
		System.out.println(file1.canRead());
		System.out.print("file2是否能写:");
		System.out.println(file2.canWrite());
		System.out.print("file2是否能写:");
		System.out.println(file2.canRead());
file1是否能写:false
file1是否能读:false
file2是否能写:true
file2是否能写:true
(3)isFile(),isdirctory():判断为目录还是文件
		//
		System.out.print("file1:");
		if(file1.isFile()) {
			System.out.println("文件");
		}else if(file1.isDirectory()) {
			System.out.println("文件夹");
		}else {
			System.out.println("不存在");
		}
		
		//
		System.out.print("file2:");
		if(file2.isFile()) {
			System.out.println("文件");
		}else if(file2.isDirectory()) {
			System.out.println("文件夹");
		}else {
			System.out.println("不存在");
		}
		
		//
		System.out.print("file6:");
		if(file6.isFile()) {
			System.out.println("文件");
		}else if(file6.isDirectory()) {
			System.out.println("文件夹");
		}else {
			System.out.println("不存在");
		}
file1:不存在
file2:文件
file6:文件夹
(4)isAbsolute():判断是否是绝对路径构建
		//判断是否为抽象路径
		System.out.print("file1是否是抽象路径:");
		System.out.println(file1.isAbsolute());
		System.out.println(file2.isAbsolute());
		System.out.print("file4是否是抽象路径:");
		System.out.println(file4.isAbsolute());
		System.out.print("file6是否是抽象路径:");
		System.out.println(file6.isAbsolute());
file1是否是抽象路径:false
false
file4是否是抽象路径:true
file6是否是抽象路径:true

3.3 文件属性

所谓属性信息是指:位置,大小,时间等
位置,大小,时间等

(1)length() :文件长度,字节数
		//判断长度
		File file = new File("C:/Users/Administrator/Desktop/j");
		File file1 = file.getParentFile();
		System.out.println(file1);
		System.out.println(file1.length());
		
		
		File file3 = new File("C:/Users/Administrator/Documents/j");
		File file4 = file3.getParentFile();
		System.out.println(file4);
		System.out.println(file4.length());
		
		
		File file5 = new File("G:/eclipsephoton/javaio/test.txt");
		File file6 = file5.getParentFile();// 文件夹
		System.out.println(file6);
		System.out.println(file6.length());
	
		
		File file7 = new File("C:\\Users\\Administrator\\Desktop\\hibernate\\1");
		File file8 = file7.getParentFile();// 文件夹
		System.out.println(file8);
		System.out.println(file8.length());

不明白为什么有的文件夹的length()方法可以有长度,我以为都是0。意外发现

C:\Users\Administrator\Desktop
8192
C:\Users\Administrator\Documents
4096
G:\eclipsephoton\javaio
0
C:\Users\Administrator\Desktop\hibernate
0
(2)判断文件所在分区容量的方法
		//判断长度
		File file = new File("C:/Users/Administrator/Desktop/XSL.jpg");
		System.out.println(file.length());
		System.out.println(file.getFreeSpace());
		System.out.println(file.getTotalSpace());
		System.out.println(file.getUsableSpace());

这里写图片描述

446671
163204370432
239218368512
163204370432

可以看到其中的相关的联系,可用空间和总容量与FreeSpace(),TotalSpace()对应。

3.4 创建和删除文件

(1)createNewFile()
		File file1 = new File("G:/eclipsephoton/javaio/test.txt");
		if(!file1.exists()) {
			boolean createNewFile = file1.createNewFile();
			System.out.println(createNewFile?"成功":"失败");
		}
		
		File file2 = new File("G:/eclipsephoton/javaio/con");
		if(!file2.exists()) {
			boolean createNewFile = file2.createNewFile();
			System.out.println(createNewFile?"成功":"失败");
		}

在windows中不能创建con为名的文件和文件夹,con为系统关键字
这里写图片描述

成功
失败
(2)delete()
		boolean delete = file1.delete();
		System.out.println(delete);

3.5 操作目录

(1)创建

mkdir():创建目录,如果没有父目录则创建不成功;mkdirs():无论是否有父目录都会创建下来
G盘没有这样的dir目录

		File dir = new File("G:/dir/xsl");
		boolean mkdir = dir.mkdir();
		System.out.println(mkdir);
		
		File dir1 = new File("G:/dir/xsl");
		boolean mkdirs = dir1.mkdirs();
		System.out.println(mkdirs);
false
true
(2)遍历
①list(),返回文件名字符串
		File dir = new File("G:/");
		String[] list = dir.list();
		for(String sub :list) {
			System.out.println(sub);
		}
$RECYCLE.BIN
dir
eclipsephoton
matlab2016b
System Volume Information
Ubuntu
Workspaces
②listFiles(),返回文件对象
		File dir = new File("G:/eclipsephoton");
		File[] list = dir.listFiles();
		for(File sub :list) {
			System.out.println(sub);
		}
G:\eclipsephoton\.metadata
G:\eclipsephoton\.recommenders
G:\eclipsephoton\CommonIO
G:\eclipsephoton\*******
G:\eclipsephoton\******
③listFiles(FilenameFilter filter),返回文件对象

此方法jdk源码

	public File[] listFiles(FilenameFilter filter) {
        String ss[] = list();
        if (ss == null) return null;
        ArrayList<File> files = new ArrayList<>();
        for (String s : ss)
            if ((filter == null) || filter.accept(this, s))
                files.add(new File(s, this));
        return files.toArray(new File[files.size()]);
    }
	File dir = new File("G:/eclipsephoton/javaio");
		File[] list = dir.listFiles(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				System.out.println(this);
				System.out.println(dir);
				return name.endsWith(".txt");
			}
		});
		for(File sub :list) {
			System.out.println(sub);
		}
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio
G:\eclipsephoton\javaio\test1.txt

递归遍历某个文件下的所有子孙文件

	public void printName(File file) {
		if (file.isDirectory()) {
			for (File file1 : file.listFiles()) {
				if (file1.isDirectory()) {
					printName(file1);
				} else {
					System.out.println(file1);
				}

			}
		}
④listRoots(),静态方法,列出根路径
		File[] listRoots = File.listRoots();
		System.out.println(Arrays.toString(listRoots));
[C:\, D:\, E:\, F:\, G:\, H:\]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值