java io系列08之 File总结

来源:互联网 发布:百度地图数据下载 编辑:程序博客网 时间:2024/05/29 19:28

本文对File的API和常用方法进行介绍。

转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_08.html

File 介绍

File 是“文件”和“目录路径名”的抽象表示形式。
File 直接继承于Object,实现了Serializable接口和Comparable接口。实现Serializable接口,意味着File对象支持序列化操作。而实现Comparable接口,意味着File对象之间可以比较大小;File能直接被存储在有序集合(如TreeSet、TreeMap中)。


File 函数列表

复制代码
// 静态成员public static final String     pathSeparator        // 路径分割符":"public static final char     pathSeparatorChar    // 路径分割符':'public static final String     separator            // 分隔符"/"public static final char     separatorChar        // 分隔符'/'// 构造函数File(File dir, String name)File(String path)File(String dirPath, String name)File(URI uri)// 成员函数boolean    canExecute()    // 测试应用程序是否可以执行此抽象路径名表示的文件。boolean    canRead()       // 测试应用程序是否可以读取此抽象路径名表示的文件。boolean    canWrite()      // 测试应用程序是否可以修改此抽象路径名表示的文件。int    compareTo(File pathname)    // 按字母顺序比较两个抽象路径名。boolean    createNewFile()         // 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。static File    createTempFile(String prefix, String suffix)    // 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。static File    createTempFile(String prefix, String suffix, File directory)    // 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。boolean    delete()             // 删除此抽象路径名表示的文件或目录。void    deleteOnExit()       // 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。boolean    equals(Object obj)   // 测试此抽象路径名与给定对象是否相等。boolean    exists()             // 测试此抽象路径名表示的文件或目录是否存在。File    getAbsoluteFile()    // 返回此抽象路径名的绝对路径名形式。String    getAbsolutePath()    // 返回此抽象路径名的绝对路径名字符串。File    getCanonicalFile()   // 返回此抽象路径名的规范形式。String    getCanonicalPath()   // 返回此抽象路径名的规范路径名字符串。long    getFreeSpace()       // 返回此抽象路径名指定的分区中未分配的字节数。String    getName()            // 返回由此抽象路径名表示的文件或目录的名称。String    getParent()          // 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。File    getParentFile()      // 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。String    getPath()            // 将此抽象路径名转换为一个路径名字符串。long    getTotalSpace()      // 返回此抽象路径名指定的分区大小。long    getUsableSpace()     // 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。int    hashCode()               // 计算此抽象路径名的哈希码。boolean    isAbsolute()         // 测试此抽象路径名是否为绝对路径名。boolean    isDirectory()        // 测试此抽象路径名表示的文件是否是一个目录。boolean    isFile()             // 测试此抽象路径名表示的文件是否是一个标准文件。boolean    isHidden()           // 测试此抽象路径名指定的文件是否是一个隐藏文件。long    lastModified()       // 返回此抽象路径名表示的文件最后一次被修改的时间。long    length()             // 返回由此抽象路径名表示的文件的长度。String[]    list()           // 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。String[]    list(FilenameFilter filter)    // 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。File[]    listFiles()                        // 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。File[]    listFiles(FileFilter filter)       // 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。File[]    listFiles(FilenameFilter filter)   // 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。static File[]    listRoots()    // 列出可用的文件系统根。boolean    mkdir()     // 创建此抽象路径名指定的目录。boolean    mkdirs()    // 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。boolean    renameTo(File dest)    // 重新命名此抽象路径名表示的文件。boolean    setExecutable(boolean executable)    // 设置此抽象路径名所有者执行权限的一个便捷方法。boolean    setExecutable(boolean executable, boolean ownerOnly)    // 设置此抽象路径名的所有者或所有用户的执行权限。boolean    setLastModified(long time)       // 设置此抽象路径名指定的文件或目录的最后一次修改时间。boolean    setReadable(boolean readable)    // 设置此抽象路径名所有者读权限的一个便捷方法。boolean    setReadable(boolean readable, boolean ownerOnly)    // 设置此抽象路径名的所有者或所有用户的读权限。boolean    setReadOnly()                    // 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。boolean    setWritable(boolean writable)    // 设置此抽象路径名所有者写权限的一个便捷方法。boolean    setWritable(boolean writable, boolean ownerOnly)    // 设置此抽象路径名的所有者或所有用户的写权限。String    toString()    // 返回此抽象路径名的路径名字符串。URI    toURI()    // 构造一个表示此抽象路径名的 file: URI。URL    toURL()    // 已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。
复制代码

 

1. 新建目录的常用方法

方法1:根据相对路径新建目录。

示例代码如下(在当前路径下新建目录“dir”):

File dir = new File("dir");dir.mkdir();

方法2:根据绝对路径新建目录。

示例代码如下(新建目录“/home/skywang/dir”):

File dir = new File("/home/skywang/dir");dir.mkdirs();

说明:上面是在linux系统下新建目录“/home/skywang/dir”的源码。在windows下面,若要新建目录“D:/dir”,源码如下:

File dir = new File("D:/dir");dir.mkdir();

方法3

URI uri = new URI("file:/home/skywang/dir"); File dir = new File(uri);sub.mkdir();

说明: 和“方法2”类似,只不过“方法2”中传入的是完整路径,而“方法3”中传入的是完整路径对应URI。


2. 新建子目录的几种常用方法

例如,我们想要在当前目录的子目录“dir”下,再新建一个子目录。有一下几种方法:

方法1

File sub1 = new File("dir", "sub1");sub1.mkdir();

说明:上面的方法作用是,在当前目录下 "dir/sub1"。它能正常运行的前提是“sub1”的父目录“dir”已经存在!

方法2

File sub2 = new File(dir, "sub2");sub2.mkdir();

说明:上面的方法作用是,在当前目录下 "dir/sub2"。它能正常运行的前提是“sub2”的父目录“dir”已经存在!

方法3

File sub3 = new File("dir/sub3");sub3.mkdirs();

说明:上面的方法作用是,在当前目录下 "dir/sub3"。它不需要dir已经存在,也能正常运行;若“sub3”的父母路不存在,mkdirs()方法会自动创建父目录。

方法4

File sub4 = new File("/home/skywang/dir/sub4");sub4.mkdirs();

说明:上面的方法作用是,新建目录"/home/skywang/dir/sub3"。它不需要dir已经存在,也能正常运行;若“sub4”的父母路不存在,mkdirs()方法会自动创建父目录。

方法5

URI uri = new URI("file:/home/skywang/dir/sub5"); File sub5 = new File(uri);sub5.mkdirs();

说明: 和“方法4”类似,只不过“方法4”中传入的是完整路径,而“方法5”中传入的是完整路径对应URI。

 

3. 新建文件的几种常用方法

例如,我们想要在当前目录的子目录“dir”下,新建一个文件。有一下几种方法

方法1

复制代码
try {    File dir = new File("dir");    // 获取目录“dir”对应的File对象    File file1 = new File(dir, "file1.txt");    file1.createNewFile();} catch (IOException e) {    e.printStackTrace();}
复制代码

说明:上面代码作用是,在“dir”目录(相对路径)下新建文件“file1.txt”。

方法2

try {    File file2 = new File("dir", "file2.txt");    file2.createNewFile();} catch (IOException e) {    e.printStackTrace();}

说明:上面代码作用是,在“dir”目录(相对路径)下新建文件“file2.txt”。

方法3

try {    File file3 = new File("/home/skywang/dir/file3.txt");    file3.createNewFile();} catch (IOException e) {    e.printStackTrace();}

说明:上面代码作用是,下新建文件“/home/skywang/dir/file3.txt”(绝对路径)。这是在linux下根据绝对路径的方法,在windows下可以通过以下代码新建文件"D:/dir/file4.txt"。

try {    File file3 = new File("D:/dir/file4.txt");    file3.createNewFile();} catch (IOException e) {    e.printStackTrace();}

方法4

复制代码
try {    URI uri = new URI("file:/home/skywang/dir/file4.txt");     File file4 = new File(uri);    file4.createNewFile();} catch (IOException e) {    e.printStackTrace();}
复制代码

说明
和“方法3”类似,只不过“方法3”中传入的是完整路径,而“方法4”中传入的是完整路径对应URI。

File API使用示例

关于File中API的详细用法,参考示例代码(FileTest.java):

复制代码
  1 import java.io.File;  2 import java.io.IOException;  3 import java.net.URI;  4 import java.util.Calendar;  5 import java.text.SimpleDateFormat;  6   7 public class FileTest {  8   9     public static void main(String[] args) { 10         testFileStaticFields() ; 11     testFileDirAPIS() ; 12     } 13  14     public static void testFileStaticFields() { 15         // 打印 路径分隔符":" 16         System.out.printf("File.pathSeparator=\"%s\"\n", File.pathSeparator); 17         // 打印 路径分隔符':' 18         System.out.printf("File.pathSeparatorChar=\"%c\"\n", File.pathSeparatorChar); 19         // 打印 分隔符"/" 20         System.out.printf("File.separator=\"%s\"\n", File.separator); 21         // 打印 分隔符'/' 22         System.out.printf("File.separatorChar=\"%c\"\n", File.separatorChar); 23     } 24  25     public static void testFileDirAPIS() { 26         try { 27         // 新建目录 "dir" 28         File dir = new File("dir"); 29         dir.mkdir(); 30  31         // 方法1:新建目录 "dir/sub1"。父目录“dir”必须已经存在! 32         File sub1 = new File("dir", "sub1"); 33         sub1.mkdir(); 34         // 方法2:新建目录 "dir/sub2"。父目录“dir”必须已经存在! 35         File sub2 = new File(dir, "sub2"); 36         sub2.mkdir(); 37         // 方法3:新建目录 "dir/sub3"。mkdirs()会自动创建不存在的父目录。 38         File sub3 = new File("dir/sub3"); 39         sub3.mkdirs(); 40         // 方法4:新建目录 "dir/sub4"。根据“绝对路径”创建,前面3个方法都是根据“相对路径”创建。 41         String dirPath = dir.getAbsolutePath();    // 获取“dir”的绝对路径 42         String sub4AbsPath = dirPath + File.separator + "sub4";    // File.separator是分隔符"/" 43         File sub4 = new File(sub4AbsPath); 44         sub4.mkdirs(); 45         // 方法5:新建目录 "dir/sub5"。根据uri 46         String uri_sub5_path = "file:"+ dirPath + File.separator + "sub5"; 47         URI uri_sub5 = new URI(uri_sub5_path);  48         File sub5 = new File(uri_sub5); 49         sub5.mkdirs(); 50  51         // 方法1:新建文件 "dir/l1_normal.txt" 52         File l1_normal = new File(dir, "l1_normal.txt"); 53         l1_normal.createNewFile(); 54         // 方法2:新建文件 "dir/.l1_hide.txt"。 55         File l1_hide = new File("dir", ".l1_hide.txt"); // 在linux中, "."开头的文件是隐藏文件。 56         l1_hide.createNewFile(); 57         // 方法3:新建文件 "dir/l1_abs.txt"。 58         String dirAbsPah =  dir.getAbsolutePath();    // 获取dir的绝对路径 59         String l1_abs_path = dirAbsPah+File.separator+"l1_abs.txt"; 60         File l1_abs = new File(l1_abs_path); 61         l1_abs.createNewFile(); 62         //System.out.printf("l1_abs_path=%s\n", l1_abs_path); 63         //System.out.printf("l1_abs path=%s\n", l1_abs.getAbsolutePath()); 64         // 方法4:新建文件 "dir/l1_uri.txt"。根据URI新建文件 65         String uri_path = "file:"+ dirAbsPah + File.separator + "l1_uri.txt"; 66         URI uri_l1 = new URI(uri_path);  67         //System.out.printf("uri_l1=%s\n", l1_abs.getAbsolutePath()); 68         File l1_uri = new File(uri_l1);  69         l1_uri.createNewFile(); 70  71         // 新建文件 "dir/sub/s1_normal" 72         File s1_normal = new File(sub1, "s1_normal.txt"); 73         s1_normal.createNewFile(); 74  75         System.out.printf("%30s = %s\n", "s1_normal.exists()", s1_normal.exists()); 76         System.out.printf("%30s = %s\n", "s1_normal.getName()", s1_normal.getName()); 77         System.out.printf("%30s = %s\n", "s1_normal.getParent()", s1_normal.getParent()); 78         System.out.printf("%30s = %s\n", "s1_normal.getPath()", s1_normal.getPath()); 79         System.out.printf("%30s = %s\n", "s1_normal.getAbsolutePath()", s1_normal.getAbsolutePath()); 80         System.out.printf("%30s = %s\n", "s1_normal.getCanonicalPath()", s1_normal.getCanonicalPath()); 81         System.out.printf("%30s = %s is \"%s\"\n", "s1_normal.lastModified()", s1_normal.lastModified(), getModifyTime(s1_normal.lastModified())); 82         System.out.printf("%30s = %s\n", "s1_normal.toURI()", s1_normal.toURI()); 83  84  85         // 列出“dir”目录下的“文件”和“文件夹”。 86         // 注意:dir.listFiles()只会遍历目录dir,而不会遍历dir的子目录! 87         System.out.println("---- list files and folders ----"); 88         File[] fs = dir.listFiles(); 89         for (File f:fs) { 90             String fname = f.getName(); 91             String absStr = f.isAbsolute() ? "[Absolute]" : ""; 92             String hidStr = f.isHidden() ? "[Hidden]" : ""; 93             String dirStr = f.isDirectory() ? "[Directory]" : ""; 94             String fileStr = f.isFile() ? "[File]" : ""; 95  96             System.out.printf("%-30s  %s%s%s%s\n", fname, fileStr, dirStr, absStr, hidStr); 97         } 98  99         } catch (Exception e) {100             e.printStackTrace();101         }102     }103 104     private static String getModifyTime(long millis) {105         // 获取Calendar对象106         Calendar cal = Calendar.getInstance();107         // 设置时间为 millis108         cal.setTimeInMillis(millis);109         // 获取格式化对象,它会按照"yyyy-MM-dd HH:mm:ss"格式化日期110         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");111         //System.out.printf("TIME %s\n", str);112         return sdf.format(cal.getTime()); 113     }114 115 }
复制代码

运行结果(在ubuntu 12.04系统下的运行结果,而不是windows!):

复制代码
File.pathSeparator=":"File.pathSeparatorChar=":"File.separator="/"File.separatorChar="/"            s1_normal.exists() = true           s1_normal.getName() = s1_normal.txt         s1_normal.getParent() = dir/sub1           s1_normal.getPath() = dir/sub1/s1_normal.txt   s1_normal.getAbsolutePath() = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt  s1_normal.getCanonicalPath() = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt      s1_normal.lastModified() = 1381730064000 is "2013-10-14 13:54:24"             s1_normal.toURI() = file:/home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt---- list files and folders ----l1_uri.txt                      [File]sub1                            [Directory]l1_abs.txt                      [File]sub5                            [Directory]sub4                            [Directory].l1_hide.txt                    [File][Hidden]sub3                            [Directory]sub2                            [Directory]l1_normal.txt                   [File]
复制代码

结果说明:运行程序,会在源文件所在的目录新建目录"dir"及其子目录和子文件。如下图:


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 领取居住证的回执单丢了怎么办 北京居住证网上申报信息填错怎么办 买家退回来的货有问题怎么办 居转户过程中生的小孩户口怎么办 人才引进申请上海户口被拒怎么办 网络购高铁票身份证没有验证怎么办 高速遇到很浓的团雾怎么办 对于大巴不按座位坐的人该怎么办 火车上遇到占座不让的人怎么办 滁州婴儿打疫苗的绿本子怎么办 检查四维说宝宝嘴巴显示不清怎么办 携程订票付款成功一直没出票怎么办 手机微信支付密码忘了怎么办 存入卡里的钱却说余额不足怎么办 买高铁票身份证未通过审核怎么办 网上订演出票不配送了怎么办 百度糯米订的演出票不配送了怎么办 高铁误点改签后的车次没票了怎么办 高铁晚点没赶上下班车怎么办 上班期间单位没给交养老保险怎么办 一键启动车钥匙遥控失灵怎么办 已经订购的火车票误了火车怎么办 飞机去程取消分开买的返程怎么办 订完学生票发现使用次数过了怎么办 坐火车买学生票没带学生证怎么办 买了学生票学生证磁条没了怎么办 买了动车学生票没带学生证怎么办 身份证没磁了怎么办能买火车票 格力空调保修单丢了怎么办 格力空调保修期内坏了怎么办 国际联程航班第一程延误怎么办 大麦网演唱会的票售罄了怎么办 国内转机航班第一班延误了怎么办 联程机票下一程航班被取消怎么办 联程机票第一班航班取消怎么办 联程机票第二段航班被取消怎么办 联程航班第一程延误行李怎么办 联程航班未赶上第二程行李怎么办 高铁晚点赶不上下一趟动车怎么办? 动车晚点赶不上下一趟车怎么办 动车晚点导致没赶上下一趟怎么办