java⽂件描述符_详解Java中的File⽂件类以及FileDescriptor
⽂件描述类
File
File 是“⽂件”和“⽬录路径名”的抽象表⽰形式。
File 直接继承于Object,实现了Serializable接⼝和Comparable接⼝。实现Serializable接⼝,意味着File对象⽀持序列化操作。⽽实现Comparable接⼝,意味着File对象之间可以⽐较⼤⼩;File能直接被存储在有序集合(如TreeSet、TreeMap中)。
1. 新建⽬录的常⽤⽅法⽅法1:根据相对路径新建⽬录。
⽰例代码如下(在当前路径下新建⽬录“dir”):
File dir = new File("dir");
dir.mkdir();
⽅法2:根据绝对路径新建⽬录。
⽰例代码如下(新建⽬录“/home/skywang/dir”):
File dir = new File("/home/skywang/dir");
dir.mkdirs();
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, "");
} catch (IOException e) {
e.printStackTrace();
}
说明:上⾯代码作⽤是,在“dir”⽬录(相对路径)下新建⽂件“”。
⽅法2
try {
File file2 = new File("dir", "");
} catch (IOException e) {
e.printStackTrace();
}
说明:上⾯代码作⽤是,在“dir”⽬录(相对路径)下新建⽂件“”。
⽅法3
try {
File file3 = new File("/home/skywang/");
} catch (IOException e) {
e.printStackTrace();
}
说明:上⾯代码作⽤是,下新建⽂件“/home/skywang/”(绝对路径)。这是在linux下根据绝对路径的⽅法,在windows下可以通过以下代码新建⽂件"D:/"。
try {
File file3 = new File("D:/");
} catch (IOException e) {
e.printStackTrace();
}
⽅法4
try {
URI uri = new URI("file:/home/skywang/");
File file4 = new File(uri);
} catch (IOException e) {
e.printStackTrace();
}
说明:
和“⽅法3”类似,只不过“⽅法3”中传⼊的是完整路径,⽽“⽅法4”中传⼊的是完整路径对应URI。
4. File API使⽤⽰例关于File中API的详细⽤法,参考⽰例代码(FileTest.java):
import java.io.File;
import java.io.IOException;
import java.URI;
import java.util.Calendar;
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 = AbsolutePath(); // 获取“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/"
File l1_normal = new File(dir, "");
ateNewFile();
// ⽅法2:新建⽂件 "dir/."。
File l1_hide = new File("dir", "."); // 在linux中, "."开头的⽂件是隐藏⽂件。
ateNewFile();
// ⽅法3:新建⽂件 "dir/"。
String dirAbsPah = AbsolutePath(); // 获取dir的绝对路径
String l1_abs_path = dirAbsPah+File.separator+"";
File l1_abs = new File(l1_abs_path);
ateNewFile();
//System.out.printf("l1_abs_path=%s\n", l1_abs_path);
//System.out.printf("l1_abs path=%s\n", AbsolutePath());
// ⽅法4:新建⽂件 "dir/"。根据URI新建⽂件
String uri_path = "file:"+ dirAbsPah + File.separator + "";
URI uri_l1 = new URI(uri_path);
//System.out.printf("uri_l1=%s\n", AbsolutePath());
File l1_uri = new File(uri_l1);
ateNewFile();
// 新建⽂件 "dir/sub/s1_normal"
File s1_normal = new File(sub1, "");
ateNewFile();
System.out.printf("%30s = %s\n", "ists()", ists());
System.out.printf("%30s = %s\n", "Name()", Name());
System.out.printf("%30s = %s\n", "Parent()", Parent());
System.out.printf("%30s = %s\n", "Path()", Path());
System.out.printf("%30s = %s\n", "AbsolutePath()", AbsolutePath()); System.out.printf("%30s = %s\n", "CanonicalPath()", CanonicalPath());
System.out.printf("%30s = %s is \"%s\"\n", "s1_normal.lastModified()", s1_normal.lastModified(), getModifyTime(s1_normal.lastModified()));
System.out.printf("%30s = %s\n", "URI()", URI());
// 列出“dir”⽬录下的“⽂件”和“⽂件夹”。
// 注意:dir.listFiles()只会遍历⽬录dir,⽽不会遍历dir的⼦⽬录!
System.out.println("---- list files and folders ----");
File[] fs = dir.listFiles();
for (File f:fs) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。