File 类 获取路径 名字等信息 详解

File 类  获取路径 名字等信息  详解

Table of Contents

File 类  获取路径 名字等信息  详解


 首先 , 看测试代码 , 分三种路径对api 获取情况分析 并总结

package test.file;

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

public class FileAPITest {
	public static File file;
	
	public static void main(String[] args) {
		testSimple();
		testMix();
		testVultr();
	}
		/***
	 * 测试正常路径
	 * 总结:
	 * 	 	绝对路径 与 普通路径  与权威路径 一致  但是 权威路径需要抛出io异常
	 * 
	 * 		获得文件名 直接getName 获得单独文件名称
	 * 	
	 *  		获得父目录 两个方法 都是获得全部路径 
	 *  							区别是一个返回字符  一个返回文件
	 *  		盘符大小 
	 *  				两个取剩余字节数
	 *  				一个取总字节数
	 *  
	 *  		
	 */
	public static void testSimple(){
	file = new File("D:\\tomcat7\\tes001\\00202\\002.txt");
		
		//  D:\tomcat7\tes001\00202\002.txt
		System.out.println(file.getAbsolutePath());
		try {
			//D:\tomcat7\tes001\00202\002.txt
			System.out.println(file.getCanonicalPath());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		// D:\tomcat7\tes001\00202\002.txt
		System.out.println(file.getPath());

		//   002.txt
		System.out.println(file.getName());//获得文件名
		
		//D:\tomcat7\tes001\00202\002.txt
		System.out.println(file.getAbsoluteFile());
		try {
			//D:\tomcat7\tes001\00202\002.txt
			System.out.println(file.getCanonicalFile());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		//获得父目录
		
		//D:\tomcat7\tes001\00202
		System.out.println(file.getParent());
		//D:\tomcat7\tes001\00202
		System.out.println(file.getParentFile());
		
		/**
		 * 
		 * 返回此抽象路径名指定的分区中未分配的字节数。 
		 * 返回的未分配字节数是一个提示,而不是一个保证,只能使用这些字节的一部分。
		 * 未分配字节数很可能在此调用后立即与实际相符。
		 * 某些外部 I/O 操作可能使其与实际不符,这些操作包括那些在此虚拟机外部系统上进行的操作。
		 *  		===>此方法不保证对此文件系统的写操作将成功。 
		 *  分区上的未分配字节数;
		 *  如果抽象路径名没有指定分区,则返回 0L。
		 *  		返回值将小于等于 getTotalSpace() 返回的总文件系统大小。 
		 */
		//    21427404800
		System.out.println(file.getFreeSpace());
		/***
		 * 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
		 * 若有可能,此方法将检查写权限和其他操作系统限制,
		 * 因此与 getFreeSpace() 相比,此方法能更准确地估计可实际写入的新数据数。 
		 * 返回的可用字节数是一个提示,而不是一个保证,只能使用这些字节的一部分。
		 * 未分配字节数很可能在此调用后立即与实际相符。某些外部 I/O 操作可能使其与实际不符,这些操作包括那些在此虚拟机外部系统上进行的操作。此方法不保证对此文件系统的写操作将成功。 
		 * 
		 * 分区上的可用字节数;
		 * 如果抽象路径名没有指定分区,则返回 0L。
		 * 
		 * 
		 * 在此信息不可用的系统上,此方法等效于调用 getFreeSpace()。 
		 */
		//21427404800
		System.out.println(file.getUsableSpace()>>10>>10>>10);

		/***
		 * 返回此抽象路径名指定的分区大小。 
		 * 返回:
		 * 
		 * 分区的大小,以字节为单位;如果此抽象路径名没有指定分区,则返回 0L。 
		 */
		// 62271778816
		System.out.println(file.getTotalSpace()>>10>>10>>10);
		

	}
	/**
	 * 
	 	 * 总结:
	 * 	 绝对路径 与 普通路径 一致 
	 * 	 与权威路径 不同  权威路径能够识别路径中的 ..  可以得到真实路径
	 * 
	 * 		获得文件名 直接getName 获得单独文件名称
	 * 	
	 *  		获得父目录 两个方法 都是获得全部路径加点 需要特殊处理 
	 *  
	 *  		盘符大小  一致 不特别说明
	 * 
	 */
	public static void testVultr(){
		file = new File("D:\\tomcat7\\tes001\\00202\\..\\001.txt");
		
//		D:\tomcat7\tes001\00202\..\001.txt
		System.out.println(file.getAbsolutePath());
		try {
			//D:\tomcat7\tes001\001.txt
			System.out.println(file.getCanonicalPath());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
//		D:\tomcat7\tes001\00202\..\001.txt
		System.out.println(file.getPath());

		//  001.txt
		System.out.println(file.getName());//获得文件名
		
//		D:\tomcat7\tes001\00202\..\001.txt
		System.out.println(file.getAbsoluteFile());
		try {
//			D:\tomcat7\tes001\001.txt
			System.out.println(file.getCanonicalFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
	
		//获得父目录
		
//		D:\tomcat7\tes001\00202\..
		System.out.println(file.getParent());
//		D:\tomcat7\tes001\00202\..
		System.out.println(file.getParentFile());
		 
	}

/***
	 * 测试相对路径
	 * 
	 * 与其之前的相比
	 * 
	 * 	绝对路径与权威路径 相同
	 * 
	 * 	普通路径与文件名相同
	 * 	
	 * 	绝对文件和权威文件都是获取文件路径+文件名
	 * 
	 * 	最大区别是父目录无法获取 为null
	 * 
	 */
	public static void testMix(){
		//相同包下的一个java类
		file = new File("FileRename.java");
		
		//E:\projectDIR\java_code\o2oSpace\Test\FileRename.java
		System.out.println(file.getAbsolutePath());
		try {
			System.out.println(file.getCanonicalPath());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		//FileRename.java
		System.out.println(file.getPath());
		System.out.println(file.getName());//获得文件名
		
		//E:\projectDIR\java_code\o2oSpace\Test\FileRename.java
		System.out.println(file.getAbsoluteFile());
		try {
			System.out.println(file.getCanonicalFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
	
		//获得父目录
		//null
		System.out.println(file.getParent());
		System.out.println(file.getParentFile());
		 
	}
	
	
}

代码运行 需要配置自己的文件名 

ps:  路径中的.. 是上级文件夹的意思

针对文件的三种路径,简单易记的方案是:

1.如果需要获取全路径+文件名

       使用 权威路径getCanonicalPath 是最稳妥的

2.如果只是单独获得文件名 ,直接getName   

3. 若果获得父目录 (在相对路径中不能获取)

     getParent返回字符

     getParentFile返回文件

4.获取盘空间的剩余大小方案中尽量使用getUsableSpace  

 最好的方案其实就是写路径尽量使用绝对路径 在后续操作上会好很多

如果没办法使用绝对路径 , 却要获取父目录 可以先获取全路径然后再截断的方式获得

暂时想到的就是这么多,欢迎留言指正!

 

 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木秀林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值