流相關File文件以及能夠操作流的properties集合


抽象路徑名中的第一個名稱是目錄名,對於 Microsoft Windows UNC 路徑名則是主機名。

抽象路徑名中第一個名稱之後的每個名稱表示一個目錄;

最後一個名稱既可以表示目錄,也可以表示文件。空 抽象路徑名沒有前綴和名稱序列。

無論是抽象路徑名還是路徑名字符串,都可以是絕對 路徑名或相對 路徑名。

絕對路徑名:完整的路徑名,不需要任何其他信息就可以定位它所表示的文件。

相反,相對路徑名必須使用取自其他路徑名的信息進行解釋。

默認情況下,java.io 包中的類總是根據當前用戶目錄來解析相對路徑名。

此目錄由系統屬性 user.dir 指定,通常是 Java 虛擬機的調用目錄。

路徑:所在的目錄加上本身 文件名或文件夾名

F:\java30\d20\fileDemo.java   在文件夾 d20下創建fileDemo.java

以絕對路徑形式封裝對象

File f = new File("F:\java30\d20\fileDemo.java");

File f = new File("F:\java30\d20","fileDemo.java");

以上兩文件的絕對路徑都爲 F:\java30\d20\fileDemo.java

getParent()         –》 F:\java30\d20

getPath()           -》F:\java30\d20\fileDemo.java

getAbsolutePath()   -F:\java30\d20\fileDemo.java

以相對路徑形似封裝對象

File f = new File("fileDemo.java");

getParent()         –》 null

getPath()           -》fileDemo.java   封裝什麼返回什麼

getAbsolutePath()   -F:\java30\d20\fileDemo.java

 

File 類的實例是不可變的;也就是說,一旦創建,File 對象表示的抽象路徑名將永不改變。

注意:通過文件對象獲取到的路徑名能夠直接用於創建文件或目錄對象 但注意該對象已存在所以在創建對象前,需要修改下獲取到的路徑名否則創建文件失敗

創建文件的路徑分隔符是單反斜槓/或雙斜槓\\但是getPath()得到-F:\java30\d20\fileDemo.java爲什麼可以創建文件對象,當然該對象已存在修改下路徑即可

由於系統 所認識的分隔符是/或者\ 但是由於在字符串中 \具有轉義功能 所以需要\\來表示\也就是說字符串中的\\系統接收到的是轉義後的\   我原來認爲 getPath()得到的路徑系統輸出爲F:\java30\d20\fileDemo.java當把getpath作爲路徑創建對象的時候他表示的就是字符串”F:\java30\d20\fileDemo.java”因爲這樣的字符串是無法作爲路徑 創建文件對象的 但是事實上,系統輸出的getpath就是系統所接受的字符串 我們創建路徑用\\表示目錄分割符就是要讓系統接收的是單斜槓\,既然系統輸出的getpath爲F:\java30\d20\fileDemo.java那麼將getpath作爲路徑(字符串)的時候其實可以認爲他的內容就是F:\\java30\\d20\\fileDemo.java而系統所接收到 看見的就是他輸出的getpath”F:\java30\d20\fileDemo.java”

 

類 File 文件和目錄路徑名的抽象表示形式。

    用來將文件或者目錄封裝成對象

    方便對文件與目錄的屬性信息進行操作。

    File對象可以作爲參數傳遞給流的構造函數。

 

瞭解File類中的常用方法。  

       

構造方法    

創建File對象時並沒有在指定處 創建文件或目錄  硬盤指定處創建文件createNewFile()  創建目錄mkdir()

File(File parent,String 文件名)   文件名可以是文件名也可以是文件夾名

        根據 parent 抽象路徑名和 child 路徑名字符串創建一個新(文件或文件夾) File 實例。

    File(String 創建的文件名路徑)    只封裝文件名 (相對路徑下創建文件或文件夾)

        通過將給定路徑名字符串轉換爲抽象路徑名來創建一個新(文件或文件夾) File 實例

    File(String 必須存在的目錄父目錄, String 創建的文件名)     文件名可以是文件名也可以是目錄名

        根據 parent 路徑名字符串和 child 路徑名字符串創建一個新(文件或目錄) File 實例。

 

注意:創建的實物 是文件還是目錄  是由mkdir()和createNewFile() 決定的 

  目錄 也可以命名爲 a.txt

 

File類的常見方法

    1,創建

        boolean createNewFile()  文件對象不存在的時候創建 文件存在則不創建返回false 文件不存在則返回false  當文件的路徑(文件所在文件夾)不存在時拋異常    輸出流對象創建文件,當文件存在的時候會覆蓋          boolean mkdir() 創建此抽象路徑名指定的目錄(文件夾)。

只能夠創建一級目錄(一個文件夾) abd文件夾存在 最多能創建abd/1 文件夾1可創建

    booleanmkdirs() 創建多級目錄。 abd文件夾存在 能創建abd/1/2/3/4 文件夾1,2,3,4可創建

    2,刪除

        boolean delete() 刪除此抽象路徑名錶示的 文件或空文件夾。 刪除失敗 返回false  

        public void deleteOnExit() 在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄。

    3,判斷

        boolean exists() 測試此抽象路徑名(File對象)表示的文件或目錄是否存在。

        boolean isDirectory() 測試此抽象路徑名(File對象)表示的文件是否是一個目錄。

 需要先判斷isexists() 

       boolean isFile()   測試此抽象路徑名(File對象)表示的文件是否是一個標準文件。

   需要先判斷isexists()

        booleanisHiden()  判斷文件是否被隱藏

        booleanisAbsolute() 測試此抽象路徑名是否爲絕對路徑名。 絕對路徑名(D:/a.txt)相對路徑名a.txt

        intcompareTo(File pathname) 按字母順序比較兩個抽象路徑名。

        booleancanRead() 該文件對象(抽象路徑名)能否被讀取。

        boolean canWrite() 該文件對象能否被寫入。

    4,獲取信息

        String getName() 返回由此抽象路徑名錶示的文件或目錄的名稱

        String getParent() 獲取父目錄 文件對象所在的目錄路徑   返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄(相對路徑下),則返回 null。

        (文件夾)F:\\0123/0000-->F:\0123         (文件)F:\\0123/0000.txt-->F:\0123

        String getPath()將此抽象路徑名轉換爲一個路徑名字符串。封裝的是什麼返回就什麼

    (文件夾)F:\\0123/0000-->F:\0123\0000        (文件)F:\\0123/0000.txt-->F:\0123\0000.txt

(文件) 0000.txt--> 0000.txt 封裝的是什麼返回就什麼

        StringgetAbsolutePath()    返回此抽象路徑名的絕對路徑名字符串。

        longlastModified() 返回此抽象路徑名錶示的文件最後一次被修改的時間。

        long length()返回由此抽象路徑名錶示的文件的長度。如果是文件夾的話 一律爲0

        staticFile[] listRoots() 列出可用的文件系統根。

        String[]list() 返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中的文件和目錄。 文件和目錄

            //調用list()方法的對象必須是目錄 該目錄還必須存在 所以需要先判斷 isDirectory()

        File[] listFiles() 返回調用者對象(目錄)下的所有文件和目錄的File對象  文件的File對象和目錄的File對象

File[] listFiles(FileFilterfilter)      返回抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。

接口 FileFilter   用於抽象路徑名的過濾器。此接口的實例可傳遞給 File 類的 listFiles(FileFilter) 
  唯一方法boolean accept(File pathname)測試指定抽象路徑名是否應該包含在某個路徑名列表中pathname - 要測試的抽象路徑名(調用者);僅當accept返回true時 該路徑名才滿足過濾器。

 

//不會自動創建文件創建文件需要mkdir()創建文件夾需要creatNewFile()

File uf = new File("F:/0123/MyServer",FileName);

//讀取流關聯了文件對象 當該文件不存在時會自動創建

FileOutputStream fos = new FileOutputStream(uf);

 

 

File方法熟悉

<span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">import java.io.*;</span>
class fileDemo 
{
	public static void main(String[] args) throws IOException
	{
		//fileMethod();
		//fileMethod_1();
		//renameto();
		//listDemo();
		list2Demo();
	}
	//過濾 獲取某類型某名稱 文件 目錄
	public static void list2Demo()
	{
		//創建指定目錄的File對象  將指定目錄封裝成對象
		File dir = new File("F:/java30/d19");

		//獲取 指定目錄下的所有 文件 和 目錄(文件夾)
		String[] sts = dir.list();

		//通過過濾 只獲取 mp3文件		String[] list(FilenameFilte接口 dir ,String name)
		String[] sts = dir.list(new FilenameFilter()    //匿名內部類
		{
			public boolean accept(File dir,String name)
			{
				return name.endsWith(".mp3");
			}
		});
		for (String st:sts )
		{
			System.out.println(st);
		}
	}

	//獲取指定 目錄下 所有文件 目錄
	public static void listDemo()
	{
		//獲取盤符下的所有文件對象
		File[] fs = File.listRoots();
		for(File f:fs)
		{
			System.out.println(f);
			//獲取各盤符下的所有 文件 目錄
			String[] sts = f.list();
			for (String st:sts )
			{
				System.out.println(st);
			}
		}
		System.out.println("獲取某指定目錄H:\\下的所有文件和目錄");
		//獲取某指定目錄下的所有文件和目錄
		File fi = new File("H:\\");//創建抽象路徑名
		//獲取指定 目錄下 所有文件 目錄
		String[] sts = fi.list();//調用list()方法的對象必須是目錄 該目錄還必須存在
		for (String st:sts )
		{
			System.out.println(st);
		}
	}
	//renameTo 功能類似 移動 可換名
	public static void renameto() throws IOException
	{
		File f1 = new File("e:\\"+"00renameto.txt");
		//創建
		//f1.createNewFile();
		File f = new File("D:\\"+"00b.txt");
		sop("reNameTo:"+f.renameTo(f1));//被移動的文件必須要先存在
	}
	//判斷 創建的File對象是 文件  還是 目錄
	public static void fileMethod_1() throws IOException
	{
		//創建File對象
		File f = new File("h:\\"+"00b.txt");
		//創建實物 文件 或 目錄
		sop("當文件對象實物不存在時創建:"+f.createNewFile());
		//判斷 File對象所指的文件或目錄 是否存在
		sop("是File對象是否創建實物嗎:"+f.exists());
		//判斷創建的File對象是文件呢還是目錄
		sop("是文件嗎:"+f.isFile());
		sop("是目錄嗎:"+f.isDirectory());
		sop("getName()"+f.getName());
		sop("getPath()"+f.getPath());
		sop("getParent()"+f.getParent());
		//如果獲取的是相對路徑則返回null  如果相對路徑中有上一層目錄 該目錄就是返回結果
		sop("getAbsolutePath()"+f.getAbsolutePath());
		f.delete();
	
	}
	public static void fileMethod() throws IOException
	{
		//將文件00b.txt封裝成fiel對象,可以將已有的和未有的文件或文件夾封裝成對象
		File f2 = new File("h:\\00b.txt");//指定路徑下創建文件
		//默認分隔符File.separator等價於\\ 等價於 /
		//File f1 = new File("h:"+File.separator+"00b.txt");
		//在指定路徑下 將以有或未有的文件封裝成文件對象  createNewFile()當指定路徑不存在時 跑異常
		File f4 = new File("H:\\Download\\","001.txt");
		//在相對路徑下創建文件對象
		File f1 = new File("00b.txt");
		
		//將指定路徑下的文件夾封裝成file對象
		//File d = new File("F:\\java30\\d20");
		File d = new File("F:"+File.separator+"java30"+File.separator+"d20");//默認分隔符的使用
		File f3 = new File(d,"00c.txt");
		//構造函數封裝什麼打印什麼
		sop("f1:"+f1);
		sop("f2:"+f2);
		sop("f3:"+f3);
		sop("f4:"+f4);
// boolean canExecute()  測試應用程序是否可以執行此抽象路徑名錶示的文件。 文件對象能否至執行
		sop("文件對象能否能執行(文件創建前) "+f1.canExecute());
		sop("文件是否存在(文件創建前) "+f1.canExecute());

		//當文件對象不存在時 通過createNewFile()方法創建文件
		sop("當文件對象f1不存在時創建:"+f1.createNewFile());
		sop("當文件對象f2不存在時創建:"+f2.createNewFile());
		sop("當文件對象f3不存在時創建:"+f3.createNewFile());
		sop("當文件對象f4不存在時創建:"+f4.createNewFile());

		sop("文件對象能否能執行(文件創建後) "+f1.canExecute());
		sop("文件是否存在(文件創建後) "+f1.canExecute());
		//通過文件對象刪除指定的文件
		sop("刪除f1  "+f1.delete());
		sop("刪除f2  "+f2.delete());
		sop("刪除f3  "+f3.delete());
		//sop("刪除f4  "+f4.delete());
		sop("文件對象能否至執行(文件刪除後) "+f1.canExecute());
		//虛擬機推出的時候刪除文件
		sop("程序退出時刪除f4  ");
		f4.deleteOnExit();
		//當前路徑下創建文件夾 mkdir() 相對路徑下
		File dir = new File("abd/hhh");//只能夠創建一級目錄 abd/hhh 不能創建abd/hhh/jj
		sop("當前路徑下創建文件夾dir:"+dir.mkdir());//目錄已經存在返回false 不存在 返回true
		//創建指定目錄下的文件夾
		//File dir2 = new File("h:/"+"abd");//當指定路徑不存在時 dir2.mkdir()創建文件夾失敗 不拋異常
		//sop("指定路徑下創建文件夾dir2:"+dir2.mkdir());
		//sop("刪除文件夾dir1  "+dir.delete());
		//sop("刪除文件夾dir2  "+dir2.delete());
		
	}
	public static void sop(Object o)
	{
	System.out.println(o);
	}
}

相關練習:

文件夾的刪除----->點擊查看代碼

文件夾的複製——>點擊查看代碼

列出文件目錄——>點擊查看代碼


Properties一個可以將鍵值進行持久化存儲的對象。Map--Hashtable的子類。

Map

       |--Hashtable

              |--Properties用於屬性配置文件,鍵和值都是字符串類型。

特點:1:可以持久化存儲數據。2:鍵值都是字符串。3:一般用於配置文件。

 需要注意一點 :將文件中的數據load(in)到properties集合中 文件中的中文 會變亂碼 properties的鍵值都是字符串

|-- load()將流中的數據加載進集合。

原理:其實就是將讀取流和指定文件相關聯,並讀取一行數據,因爲數據是規則的key=value,所以獲取一行後,通過 = 對該行數據進行切割,左邊就是鍵,右邊就是值,將鍵、值存儲到properties集合中。

|-- store():寫入各個項後,刷新輸出流。

|-- list():將集合的鍵值數據列出到指定的目的地。


配置文件:小練習

用於記錄應用程序運行的次數
如果次數已到,那麼給出註冊提示

配置文件可以實現應用程序數據的共享

點擊打開鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章