如果要對文件產(chǎn)出文件內(nèi)容的開發(fā)操作,應(yīng)該使用java.io包完成,而在java.io包里面一個有五個核心類和一個核心接口:
- 五個核心類:File InputStream OutputStream Reader Writer;
- 一個核心接口:Serializable
在整個java.io包里面file類是唯一一個與文件本身操作有關(guān)的類,但是不涉及到文件的具體內(nèi)容。所謂的文本本身是指文件的創(chuàng)建、刪除等操作
如果想要使用File類,那么首先就要使用通過它提供的構(gòu)造方法定義一個要操作文件的路徑:
- 設(shè)置完整路徑:
public File(String pathname),大部分情況使用此類操作; - 設(shè)置父路徑與子路徑:
public File(String parent,String child),在Android上使用比較多;
范例:操作文件
- 創(chuàng)建文件:
public boolean createNewFile() throws IOException
· 如果目錄不能訪問;
· 如果現(xiàn)在文件重名,或者文件名稱錯誤; - 刪除文件:
public boolean delete() - 判斷文件是否存在:
public boolean exists()
import java.io.File;
public class FileClass {
public static void main(String[] args) throws Exception {
//注意\t是制表符,需要轉(zhuǎn)義
File file = new File("D:\\Document\\test.txt");
if(file.exists()) {
System.out.println("file exists ; delete it!");
file.delete();
} else {
System.out.println("File does not exist , create it !" + "\n" + file.createNewFile());
}
}
}
以上的程序已經(jīng)完成了具體的文件創(chuàng)建與刪除的操作,但是程序存在兩個問題:
- 在windows系統(tǒng)里面支持的是"\"路徑分隔符,Linux系統(tǒng)使用的是"/"路徑分隔符;
· 在File類里面提供一個常量:public static final String separator
File file = new File("D:" + File.separator + "Document" + File.separator + "test.txt");
- 在進(jìn)行java.io 操作的過程之中,會出現(xiàn)延遲的情況,是因為Java程序是通過JVM間接的調(diào)用操作系統(tǒng)的文件處理函數(shù)進(jìn)行操作處理,所以中間會有延遲出現(xiàn)。
以上已經(jīng)實現(xiàn)了文件的創(chuàng)建操作,所以中間會出現(xiàn)延遲情況。
如果父路徑不存在就會出現(xiàn)錯誤:
Exception in thread "main" java.io.IOException: 系統(tǒng)找不到指定的路徑。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
at FileActionClass.FileClass.main(FileClass.java:14)
所以需要判斷父路徑是否存在,如果不存在就創(chuàng)建。
- 找到父路徑:
public File getParentFIle() - 創(chuàng)建目錄:
public boolean mkdirs()
import java.io.File;
public class FileClass {
public static void main(String[] args) throws Exception {
//注意\t是制表符,需要轉(zhuǎn)義
//File file = new File("D:\\Document\\test.txt");
File file = new File("D:" + File.separator + "Document" + File.separator + "Document" + File.separator + "test.txt");
if (!file.getParentFile().exists()) {
file.mkdirs();
}
if(file.exists()) {
System.out.println("file exists ; delete it!");
file.delete();
} else {
System.out.println("File does not exist , create it !" + "\n" + file.createNewFile());
}
}
}
在File類里面提供一系列的取得文件信息內(nèi)容的操作方法:
- 取得文件大小:
public long length() - 判斷是否是文件:
public boolean isFile() - 判斷是否是目錄:
public boolean isDirectory() - 最近一次修改日期:
public long lastModified()
import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
public class FileClass_2 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "Document" + File.separator + "test.txt");
if (file.exists()) {
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println("文件大?。? + (new BigDecimal((double)file.length() / 1024 / 1024)
.divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP)) + "M");
System.out.println("最后修改時間:" +new SimpleDateFormat("yyyy-MM-dd").format(file.lastModified()));
}
}
}
以上的操作都是對文件進(jìn)行的,對于目錄而言,在File類里面有如下兩個列出目錄的方法:
- 列出目錄下的信息:
public String[] list() - 列出所有的信息,以File類包裝:
public File[] listFiles()
范例:列出目錄信息
import java.io.File;
public class DictionaryClass {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "Document" );
if (file.isDirectory()) {
String[] result = file.list();
for (int x = 0 ; x < result.length ; x++) {
System.out.println(result[x]);
}
}
}
}
輸出顯示:
eclipse-workspace
eDiary-workspace
IntelliJ-workspace
StudyDoc
test.txt
WeChat
使用listFiles()方法:
import java.io.File;
public class DictionaryClass {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "Document" );
if (file.isDirectory()) {
File[] result = file.listFiles();
for (int x = 0 ; x < result.length ; x++) {
System.out.println(result[x]);
}
}
}
}
輸出顯示:
D:\Document\eclipse-workspace
D:\Document\eDiary-workspace
D:\Document\IntelliJ-workspace
D:\Document\StudyDoc
D:\Document\test.txt
D:\Document\WeChat
范例:列出指定目錄下的所有子路徑
- 如果制定的是目錄,則繼續(xù)列出所有的子目錄,應(yīng)該使用遞歸的方式完成。
import java.io.File;
public class DirectoryClass_2 {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "Document");
print(file);
}
public static void print(File file) {
if (file.isDirectory()) {
File[] result = file.listFiles();
if (result != null) {
for (int x = 0 ; x < result.length ; x++) {
print(result[x]);
}
}
}
System.out.println(file);
}
}