File 类 获取路径 名字等信息 详解
Table of Contents
首先 , 看测试代码 , 分三种路径对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
最好的方案其实就是写路径尽量使用绝对路径 在后续操作上会好很多
如果没办法使用绝对路径 , 却要获取父目录 可以先获取全路径然后再截断的方式获得
暂时想到的就是这么多,欢迎留言指正!