大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: File

不同的作业系统对于文件系统路径的设定各有差别,例如在Windows中,一个路径的表示法可能是:
"c:\\Windows\\Fonts\\"

而在Linux下的路径设定可能是:
"/home/justin/"

Windows的路径指定是使用UNC(Universal Naming Convention)路径名,以\\开始表示磁碟根目录,如果没有以\\开始表示相对路径,c是可选的磁碟指定,后面跟随着 : 字节。而UNIX-Like系统的路径指定以 / 开始表示绝对路径,不以 / 开始表示相对路径。

因而在程序中设定路径时会有系统相依性的问题,File类提供一个抽象的、与系统独立的路径表示,您给它一个路径字符串,它会将它转换为与系统无关的抽象路径表示,这个路径可以指向一个文件、目录或是URI,您可以用以下四种方式来建构File的实例:
File(File parent, String child)
File(String pathname)
File(String parent, String child)
File(URI uri)

一个File的实例被建立时,它就不能再被改变内容;File类除了用来表示一个文件或目录的抽象表示之外,它还提供了不少相关操作方法,您可以用它来对文件系统作一些查询与设定的动作。

来看个简单的程序:

  • FileDemo.java
package onlyfun.caterpillar;

import java.io.*;
import java.util.*;

public class FileDemo {
public static void main(String[] args) {
try {
File file = new File(args[0]);
if(file.isFile()) { // 是否为文件
System.out.println(args[0] + " 文件");
System.out.print(
file.canRead() ? "可读 " : "不可读 ");
System.out.print(
file.canWrite() ? "可写 " : "不可写 ");
System.out.println(
file.length() + "位元组");
}
else {
// 列出所有的文件及目录
File[] files = file.listFiles();
ArrayList<File> fileList =
new ArrayList<File>();
for(int i = 0; i < files.length; i++) {
// 先列出目录
if(files[i].isDirectory()) { //是否为目录
// 取得路径名
System.out.println("[" +
files[i].getPath() + "]");
}
else {
// 文件先存入fileList,待会再列出
fileList.add(files[i]);
}
}

// 列出文件
for(File f: fileList) {
System.out.println(f.toString());
}
System.out.println();
}
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileDemo pathname");
}
}
}


执行结果:
 java onlyfun.caterpillar.FileDemo C:\
[C:\WINDOWS]
[C:\Documents and Settings]
[C:\Program Files]
[C:\System Volume Information]
[C:\Recycled]
C:\A3N_A3L.10
C:\bootfont.bin
C:\ntldr
C:\NTDETECT.COM
C:\boot.ini
C:\CONFIG.SYS
C:\AUTOEXEC.BAT
C:\IO.SYS
C:\MSDOS.SYS
C:\Finish.log
C:\pagefile.sys
C:\VIRTPART.DAT