java io进修(七) File总结
副标题#e#
本文对File的API和常用要领举办先容。
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。
#p#副标题#e#
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();
#p#分页标题#e#
说明:上面的要领浸染是,在当前目次下 "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
#p#分页标题#e#
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):
import java.io.File; import java.io.IOException; import java.net.URI; import java.util.Calendar; import java.text.SimpleDateFormat; public class FileTest { public static void main(String[] args) { testFileStaticFields() ; testFileDirAPIS() ; } public static void testFileStaticFields() { // 打印 路径脱离符":" System.out.printf("File.pathSeparator=\"%s\"\n", File.pathSeparator); // 打印 路径脱离符':' System.out.printf("File.pathSeparatorChar=\"%c\"\n", File.pathSeparatorChar); // 打印 脱离符"/" System.out.printf("File.separator=\"%s\"\n", File.separator); // 打印 脱离符'/' System.out.printf("File.separatorChar=\"%c\"\n", File.separatorChar); } public static void testFileDirAPIS() { try { // 新建目次 "dir" File dir = new File("dir"); dir.mkdir(); // 要领1:新建目次 "dir/sub1"。父目次“dir”必需已经存在! File sub1 = new File("dir", "sub1"); sub1.mkdir(); // 要领2:新建目次 "dir/sub2"。父目次“dir”必需已经存在! File sub2 = new File(dir, "sub2"); sub2.mkdir(); // 要领3:新建目次 "dir/sub3"。mkdirs()会自动建设不存在的父目次。 File sub3 = new File("dir/sub3"); sub3.mkdirs(); // 要领4:新建目次 "dir/sub4"。按照“绝对路径”建设,前面3个要领都是按照“相对路径”建设。 String dirPath = dir.getAbsolutePath(); // 获取“dir”的绝对路径 String sub4AbsPath = dirPath + File.separator + "sub4"; // File.separator是脱离符"/" File sub4 = new File(sub4AbsPath); sub4.mkdirs(); // 要领5:新建目次 "dir/sub5"。按照uri String uri_sub5_path = "file:"+ dirPath + File.separator + "sub5"; URI uri_sub5 = new URI(uri_sub5_path); File sub5 = new File(uri_sub5); sub5.mkdirs(); // 要领1:新建文件 "dir/l1_normal.txt" File l1_normal = new File(dir, "l1_normal.txt"); l1_normal.createNewFile(); // 要领2:新建文件 "dir/.l1_hide.txt"。 File l1_hide = new File("dir", ".l1_hide.txt"); // 在linux中, "."开头的文件是埋没文件。 l1_hide.createNewFile(); // 要领3:新建文件 "dir/l1_abs.txt"。 String dirAbsPah = dir.getAbsolutePath(); // 获取dir的绝对路径 String l1_abs_path = dirAbsPah+File.separator+"l1_abs.txt"; File l1_abs = new File(l1_abs_path); l1_abs.createNewFile(); //System.out.printf("l1_abs_path=%s\n", l1_abs_path); //System.out.printf("l1_abs path=%s\n", l1_abs.getAbsolutePath()); // 要领4:新建文件 "dir/l1_uri.txt"。按照URI新建文件 String uri_path = "file:"+ dirAbsPah + File.separator + "l1_uri.txt"; URI uri_l1 = new URI(uri_path); //System.out.printf("uri_l1=%s\n", l1_abs.getAbsolutePath()); File l1_uri = new File(uri_l1); l1_uri.createNewFile(); // 新建文件 "dir/sub/s1_normal" File s1_normal = new File(sub1, "s1_normal.txt"); s1_normal.createNewFile(); System.out.printf("%30s = %s\n", "s1_normal.exists()", s1_normal.exists()); System.out.printf("%30s = %s\n", "s1_normal.getName()", s1_normal.getName()); System.out.printf("%30s = %s\n", "s1_normal.getParent()", s1_normal.getParent()); System.out.printf("%30s = %s\n", "s1_normal.getPath()", s1_normal.getPath()); System.out.printf("%30s = %s\n", "s1_normal.getAbsolutePath()", s1_normal.getAbsolutePath()); System.out.printf("%30s = %s\n", "s1_normal.getCanonicalPath()", s1_normal.getCanonicalPath()); System.out.printf("%30s = %s is \"%s\"\n", "s1_normal.lastModified()", s1_normal.lastModified(), getModifyTime(s1_normal.lastModified())); System.out.printf("%30s = %s\n", "s1_normal.toURI()", s1_normal.toURI()); // 列出“dir”目次下的“文件”和“文件夹”。 // 留意:dir.listFiles()只会遍历目次dir,而不会遍历dir的子目次! System.out.println("---- list files and folders ----"); File[] fs = dir.listFiles(); for (File f:fs) { String fname = f.getName(); String absStr = f.isAbsolute() ? "[Absolute]" : ""; String hidStr = f.isHidden() ? "[Hidden]" : ""; String dirStr = f.isDirectory() ? "[Directory]" : ""; String fileStr = f.isFile() ? "[File]" : ""; System.out.printf("%-30s %s%s%s%s\n", fname, fileStr, dirStr, absStr, hidStr); } } catch (Exception e) { e.printStackTrace(); } } private static String getModifyTime(long millis) { // 获取Calendar工具 Calendar cal = Calendar.getInstance(); // 配置时间为 millis cal.setTimeInMillis(millis); // 获取名目化工具,它会凭据"yyyy-MM-dd HH:mm:ss"名目化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //System.out.printf("TIME %s\n", str); return sdf.format(cal.getTime()); } }
查察本栏目
#p#分页标题#e#
运行功效(在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"及其子目次和子文件。如下图:
来历:http://www.cnblogs.com/skywang12345/p/io_08.html