Java文件的基本操作知識點
提綱:
一:基本概念彙總:
1.學習文件操作的必要性:
2.文件操作的概念:
3.文件的概念:
4.選擇文件存儲的條件:
5.文件存儲的特點:
6.文件的表示和訪問:
二:File類的具體文件操作
1.File類的基本介紹:
2.File類的方法使用示例;
(1).File 對象代表文件路徑:
(2).File類的常用方法:
(3).較爲完整的文件操作示例: (4).顯示某個目錄下的所有文件示例:
(5)刪除某個目錄下的所有文件示例:
正文:
一:基本概念彙總:
1.學習文件操作的必要性:
在 IO 操作中,需要使用的數據源有很多,作爲一個 IO 技術的初學者,從讀寫文件開始學習 IO 技術是一個比較好的選擇。因爲文件是一種常見的數據源,而且讀寫文件也是程序員進行 IO 編程的一個基本能力。
2.文件操作的概念:
在程序中經常需要將數據存儲到文件中,也需要按照正確的格式來讀取各種數據。
3.文件的概念:
文件 (File)是最常見的數據源之一,
4.選擇文件存儲的條件:
(1).對於數據的讀寫速度要求不高
(2).存儲的數據量不是很大
5.文件存儲的特點:
(1).存儲在文件內部的數據是永久存儲的,而內存中的數據在程序退出或計算機關機以後,數據就丟失了。
(2).在不同的存儲介質中,文件中的數據都是以一定的順序依次存儲起來,在實際讀取時由硬件以及操作系統完成對於數據的控制,保證程序讀取到的數據和存儲的順序保持一致。
(3).文件的存儲介質有很多,由於 IO 類設計時,從數據源轉換爲流對象的操作由 API 實現了,所以存儲介質的不同對於程序員來說是透明的,和實際編寫代碼無關。
6.文件的表示和訪問:
文件的路徑+文件的全名.
(1) 絕對路徑和相對路徑
絕對路徑:指完整路徑.
好處:唯一指定文件.
缺點:受到的限制很大,且不能在不同的操作系統下運行。
相對路徑:文件的部分路徑.
好處:更通用地代表位置,增加靈活性。
注意:
代碼中文件路徑的書寫形式:
(c:\\test\\Hello.java)或(c:/test/Hello.java),因爲 ’\’ 是 Java 語言中的特殊字符。
static
String
separator
與系統有關的默認名稱分隔符,爲了方便,它被表示爲一個字符串。
("c:"+File.separator
+"test"+File.separator
+"Hello.java"),可以程序的跨平臺.
(2) 文件名稱
文件名稱一般形式:“文件名 . 後綴名”。文件名錶明文件作用,後綴名錶明類型。
文件名稱只是一個標示,方便使用,和實際存儲的文件內容沒有必然的聯繫。
系統自動關聯後綴名和對應的程序便於打開文件。
編碼時注意文件名的大小寫和後綴名。
二:File類的具體文件操作
1.File類的基本介紹:
在java.io包中的File類,用來將文件或者文件夾封裝成對象,方便對文件與文件夾的屬性信息進行操作。
可以方便的代表文件的概念,以及存儲一些對於文件的基本操作.
File 類的對象代表具體的文件路徑,絕對路徑,相對路徑和文件夾(特殊的路徑)均可以
2.File類的方法使用示例;
(1).File 對象代表文件路徑
創建的文件對象示例:
方法:
public File(String pathname)
示例:
File f1 = new File(“d:\\test\\1.txt”);
File f2 = new File(“1.txt”);
File f3 = new File(“e:\\abc”);
方法:
public File(String parent, String child)
使用父路徑和子路徑結合,實現代表文件路徑。
示例:
File f4 = new File(“d:\\test\\”,”1.txt”);
方法:
............
示例:
(2),File類的常用方法:
方法:
boolean createNewFile()
創建文件,
當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。
示例:
try {
boolean b = f3.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
作用:創建指定的文件。該方法只能用於創建文件,不能用於創建文件夾,且文件路徑中包含的文件夾必須存在。
方法:
createTempFile(String prefix,
String suffix)
在默認臨時文件目錄中創建一個空文件,使用給定前綴和後綴生成其名稱。static
createTempFile(String
prefix, String suffix,
File directory)
在指定目錄中創建一個新的空文件,使用給定的前綴和後綴字符串生成其名稱。
示例:
//臨時文件對象的創建
File tmpFile1 = File.createTempFile("####", "%%%%");
File tmpFile2 = File.createTempFile("ttttt", ".tmp", tempDir);
File tmpFile3 = File.createTempFile("$$$", " ", null);
方法:
void
deleteOnExit()
在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄。
示例:
//臨時文件對象的刪除
tmpFile1.deleteOnExit();
tmpFile2.deleteOnExit();
tmpFile3.deleteOnExit();
(3).較爲完整的文件操作示例:
import java.io.File;
/*
* 日期:2012-03-07
* 功能:演示File類的常用方法的使用
*
*/
public class FileDemo1 {
public static void main(String[] args) {
//////////////////////////////////////////////////////////////
// File(String pathname)
// 通過將給定路徑名字符串轉換爲抽象路徑名來創建一個新 File 實例。
File f1 = new File("d:\\編程生成的文件1.txt");
//創建的文件的路徑在哪兒呢?
//File f1 = new File("編程生成的文件1.txt");
File f2 = new File("d:\\編程創建的文件夾1");
File f3 = new File("d:\\編程創建的文件夾2\\創建父類不存在的文件夾1");
// File(File parent, String child)
// 根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例。
// File(URI uri)
// 通過將給定的 file: URI 轉換爲一個抽象路徑名來創建一個新的 File 實例。
//////////////////////////////////////////////////////////////
//創建文件: boolean createNewFile()
// 當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。
try {
System.out.println("創建文件f1是否成功?..."+f1.createNewFile());
} catch (Exception e) {
e.printStackTrace();
}
//////////////////////////////////////////////////////////////
//創建文件夾(父類存在):boolean mkdir()
//創建此抽象路徑名指定的目錄。
System.out.println("\n創建文件夾f2是否成功?..."+f2.mkdir());
//創建文件夾(父類不存在):boolean mkdirs()
//創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
System.out.println("創建父類不存在的文件夾f3是否成功?..."+f3.mkdirs()+"\n");
//////////////////////////////////////////////////////////////
// File getAbsoluteFile()
// 返回此抽象路徑名的絕對路徑名形式。
System.out.println("文件f1的絕對路徑名形式是:" + f1.getAbsolutePath());
// String getName()
// 返回由此抽象路徑名錶示的文件或目錄的名稱。
System.out.println("文件f3的文件名是:" + f1.getName());
// String getParent()
// 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null。
System.out.println("文件f1的父目錄的路徑名是:" + f1.getParent());
// boolean isDirectory()
// 測試此抽象路徑名錶示的文件是否是一個目錄。
System.out.println("文件f1是否是目錄?..." + f1.isDirectory());
// boolean isFile()
// 測試此抽象路徑名錶示的文件是否是一個標準文件。
System.out.println("文件f1是否是文件?..." + f1.isFile());
// long length()
// 返回由此抽象路徑名錶示的文件的長度。
System.out.println("文件f1的長度是:" + f1.length()+"\n");
//////////////////////////////////////////////////////////////
//File(String parent, String child)
//根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例。
File f4 = new File("d:\\", "編程生成的文件2.txt");
//boolean exists()
// 測試此抽象路徑名錶示的文件或目錄是否存在。
System.out.println("文件f4是否存在?..." + f4.exists()+"\n");
//////////////////////////////////////////////////////////////
File f5 = new File("d:\\編程軟件和工具");
// String[] list()
// 返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中的文件和目錄。
String[] str = f5.list();
for (int i = 0; i < str.length; i++) {
System.out.println("獲得當前文件夾f5下所有文件和文件夾名稱..." + str[i]);
}
System.out.println();
// File[] listFiles()
// 返回一個抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中的文件。
File[] f6 = f5.listFiles();
for (int i = 0; i < f6.length; i++) {
System.out.println("文件f5下的文件對象有..." + f6[i]);
}
System.out.println();
//////////////////////////////////////////////////////////////
//boolean renameTo(File dest)
//重新命名此抽象路徑名錶示的文件。
File f7 = new File("d:\\編程生成的文件3.txt");
System.out.println("修改文件f1的文件名是否成功?..."+f1.renameTo(f7));
//boolean setReadable(boolean readable)
//設置此抽象路徑名所有者讀權限的一個便捷方法。 設置文件爲只讀
System.out.println("設置文件f7的屬性爲只讀是否成功?..."+f7.setReadOnly());
}
}
(4)顯示某個目錄下的所有文件示例:
import java.io.*;
/*
* 日期:2012-03-08
* 功能:
* 顯示某個文件夾下的所有文件和文件夾,原理是輸出當前名稱,
* 然後判斷當前File對象是文件還是文件夾,如果則獲得該文件夾下
* 的所有子文件和子文件夾,並遞歸調用該方法實現。
*/
public class ShowAllFileDemo {
public static void main(String[] args) {
File f1 = new File("d:\\億度空間下載");
ShowAllFile(f1);
}
// 遞歸函數的定義
public static void ShowAllFile(File f1) {
File[] f2 = f1.listFiles();
for (int i = 0; i < f2.length; i++) {
System.out.println("文件對象有:..." + f2[i]);
if (f2[i].isDirectory()) {
ShowAllFile(f2[i]);
}
}
System.out.println();
}
}
(5)刪除某個目錄下的所有文件示例:
import java.io.*;
/*
* 日期:2012-03-08
* 功能:
* 刪除某個文件夾下的所有文件和文件夾,原理是判斷是否是文件,
* 如果是文件則直接刪除,如果是文件夾,則獲得該文件夾下所有的子文件和子文件夾,
* 然後遞歸調用該方法處理所有子文件和子文件夾,然後將空文件夾刪除。
*
*/
public class DeleteAllFileDemo {
public static void main(String[] args) {
File f1 = new File("d:\\常實驗報告 - 副本");
DeleteAllFile(f1);
}
// 遞歸函數的定義
public static void DeleteAllFile(File f1) {
File[] f2 = f1.listFiles();
for (int i = 0; i < f2.length; i++) {
if (f2[i].isFile()) {
f2[i].delete();
}
if (f2[i].isDirectory()) {
DeleteAllFile(f2[i]);
}
f1.delete();
}
}
}