成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java IO : File

chaos_G / 3568人閱讀

摘要:類位于的這個包下。的構(gòu)造器中的路徑參數(shù)也支持絕對路徑和相對路徑,像上面的代碼用的是絕對路徑。也提供了另外一種構(gòu)造器這兩個構(gòu)造器可以讓你在構(gòu)造文件或目錄時指定它的父目錄。返回的,則是所有文件或目錄所代表的對象。同時提供以下接口獲取文件權(quán)限信息

File類位于JDK的java.io這個包下。
一個File類既可以代表一個文件,也可以代表一個目錄。
構(gòu)造器

要使用File,首先需要通過構(gòu)造器構(gòu)造它的一個實例

File file1 = new File("/a/b");
File file2 = new File("C:a.dat");

構(gòu)造File類需要給它指定一個路徑,比如上面代碼中的/a/b,C:a.dat.
路徑可以代表一個文件,也可以代表一個目錄。

路徑分隔符依據(jù)操作系統(tǒng)的不同而不同,在類Unix系統(tǒng)中,分隔符是/,而在windows操作系統(tǒng)中,分隔符是,如果在代碼中以硬編碼的方式寫死了路徑分隔符,那么代碼的可移植性就不高??梢酝ㄟ^File.separator或者是File.separatorChar來獲取當(dāng)前操作系統(tǒng)的路徑分隔符。

File的構(gòu)造器中的路徑參數(shù)也支持絕對路徑和相對路徑,像上面的代碼用的是絕對路徑。那么相對路徑相對的是哪個路徑呢?Java會默認(rèn)采用user.dir作為當(dāng)前路徑,可以通過System.getProperty("user.dir")來得到這個路徑,這個路徑也是JVM啟動時所在的路徑。

File也提供了另外一種構(gòu)造器:

File(String parent, String child)
File(File parent, String child)

這兩個構(gòu)造器可以讓你在構(gòu)造文件或目錄時指定它的父目錄。

路徑與名字

File類包含了諸多獲取路徑和路徑名字的方法,這些方法看似差別不大卻又別有洞天,可以通過下面幾段代碼來看看區(qū)別:

執(zhí)行以下代碼

File file = new File(".");
System.out.println("Absolute path = " + file.getAbsolutePath());
System.out.println("Canonical path = " + file.getCanonicalPath());
System.out.println("Name = " + file.getName());
System.out.println("Parent = " + file.getParent());
System.out.println("Path = " + file.getPath());
System.out.println("Is absolute = " + file.isAbsolute());

得到的結(jié)果是:

Absolute path = C:prjooksioch02codePathInfo.
Canonical path = C:prjooksioch02codePathInfo
Name = .
Parent = null
Path = .
Is absolute = false

執(zhí)行以下代碼:

File file = new File("C:
eports2015..2014February");
System.out.println("Absolute path = " + file.getAbsolutePath());
System.out.println("Canonical path = " + file.getCanonicalPath());
System.out.println("Name = " + file.getName());
System.out.println("Parent = " + file.getParent());
System.out.println("Path = " + file.getPath());
System.out.println("Is absolute = " + file.isAbsolute());

得到的結(jié)果是:

Absolute path = C:
eports2015..2014February
Canonical path = C:
eports2014February
Name = February
Parent = C:
eports2015..2014
Path = C:
eports2015..2014February
Is absolute = true

執(zhí)行以下代碼:

File file = new File("");
System.out.println("Absolute path = " + file.getAbsolutePath());
System.out.println("Canonical path = " + file.getCanonicalPath());
System.out.println("Name = " + file.getName());
System.out.println("Parent = " + file.getParent());
System.out.println("Path = " + file.getPath());
System.out.println("Is absolute = " + file.isAbsolute());

得到的結(jié)果是:

Absolute path = C:prjooksioch02codePathInfo
Canonical path = C:prjooksioch02codePathInfo
Name =
Parent = null
Path =
Is absolute = false

從這里可以看出來,file.getAbsolutePath()會把相對路徑的信息也打印出來,讀起來并不是非常直觀的,而file.getCanonicalPath()總是以對人類閱讀友好的方式打印路徑。
如果File的入?yún)⑹墙^對路徑,那么getNamegetPath只打印入?yún)ⅲ⑶?b>getParent為null。

得到文件/目錄信息

前面說過,F(xiàn)ile可以是一個文件,也可以代表一個目錄,如何知道File代表的是哪一個呢?通過以下兩個方法就可以知道

boolean isDirectory()

boolean isFile()

有時候我們想知道File代表的那個文件或目錄是否在文件系統(tǒng)中存在,boolean exists()會告訴你。
在類Unix文件系統(tǒng)中,隱藏文件通常以.開頭,比如用戶的home目錄下的.bash_profile,同樣在windows中也會有隱藏文件,可通過isHidden()來判斷一個文件是否是隱藏文件。通過length()可以獲得文件的大小,通過lastModified()可以獲得文件的最后修改時間,這個時間是距離(1970,1,1)的毫秒數(shù)。通??梢酝ㄟ^比較一個文件的最后修改時間來判斷文件是否被修改過。

列舉某個目錄

可通過File[] listRoots()來列舉當(dāng)前文件系統(tǒng)的根目錄。
在windows下,就是列出所有的盤符:

C:
D:
E:
F:

在Unix中,只有一個,那就是/

如果要列出某個特定目錄下的文件和目錄呢,有以下方法:

String[] list()
String[] list(FilenameFilter filter)
File[] listFiles()
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)

以上方法中,返回String[]的,則是列舉出所有文件或目錄的名字。返回File[]的,則是所有文件或目錄所代表的File對象。
FileFilterFilenameFilter是過濾器,能讓你在列舉目錄時選擇過濾掉哪些文件或目錄。

獲取磁盤空間信息

File提供了三個方法可以讓你得知某個分區(qū)的磁盤空間的信息:

long getFreeSpace() //獲取剩余空間
long getTotalSpace() //獲取總空間大小
long getUsableSpace() //獲取剩余可用空間

盡管getFreeSpace和getUsableSpace看起來差不多,但實際上是有差別的,getUsableSpace會進(jìn)行更多細(xì)致的檢查,比如當(dāng)前JVM進(jìn)程是否對該目錄有寫權(quán)限,以及另外一些操作系統(tǒng)的限制等,但getFreeSpace和getUsableSpace返回的值只能當(dāng)做一個參考值,因為有可能有其他的進(jìn)程正在讀寫這個磁盤空間。
下面是一個例子:

File[] roots = File.listRoots();
for (File root: roots) {
    System.out.println("Partition: " + root);
    System.out.println("Free space on this partition = " +
    root.getFreeSpace());
    System.out.println("Usable space on this partition = " +
    root.getUsableSpace());
    System.out.println("Total space on this partition = " +
    root.getTotalSpace());
    System.out.println("***");
}

輸出結(jié)果為:

Partition: C:
Free space on this partition = 143271129088
Usable space on this partition = 143271129088
Total space on this partition = 499808989184
***
Partition: D:
Free space on this partition = 0
Usable space on this partition = 0
Total space on this partition = 0
***
Partition: E:
Free space on this partition = 733418569728
Usable space on this partition = 733418569728
Total space on this partition = 1000169533440
***
Partition: F:
Free space on this partition = 33728192512
Usable space on this partition = 33728192512
Total space on this partition = 64021835776
***
對文件或目錄進(jìn)行修改

如果想創(chuàng)建一個文件,使用boolean createNewFile()將會創(chuàng)建一個新的空文件,同樣,創(chuàng)建一個目錄可以用boolean mkdir() 或者boolean mkdirs() ,如果中間目錄不存在,后者會創(chuàng)建好所有中間目錄,而前者將會報錯某個目錄不存在。

有時候你希望創(chuàng)建一個臨時文件,可以使用static File createTempFile(String prefix, String suffix),這個方法將會默認(rèn)把臨時文件放在用戶的臨時文件夾中,如果你想指定臨時文件存放的地方,可以使用static File createTempFile(String prefix, String suffix, File directory)指定該目錄。

文件權(quán)限

從Java 1.6開始,增加了對文件權(quán)限修改的接口。

boolean setExecutable(boolean executable)
boolean setExecutable(boolean executable, boolean ownerOnly)
boolean setReadable(boolean readable)
boolean setReadable(boolean readable, boolean ownerOnly)
boolean setWritable(boolean writable)
and boolean setWritable(boolean writable boolean ownerOnly)

同時提供以下接口獲取文件權(quán)限信息:

boolean canRead()
boolean canWrite()
boolean canExecute()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65343.html

相關(guān)文章

  • Java學(xué)習(xí)之常用工具類

    摘要:小編來為大家介紹幾款比較常用的開發(fā)工具這是象面包和奶油一樣必須的通用語言庫,這個實用工具類包括一些很早以前在中未包含的重要方法。 小編來為大家介紹幾款比較常用的Java開發(fā)工具:StringUtils這是象面包和奶油一樣必須的通用語言庫,這個實用工具類包括一些很早以前在String中未包含的重要方法。StringUtils...

    番茄西紅柿 評論0 收藏2637
  • 基于javaIO流的文件讀取系統(tǒng)

    摘要:流讀寫基本功能新建文件查看列表寫文件刪除文件查看文件導(dǎo)入的包下面新建一個類,然后在函數(shù)里初始化一個方法,方法中用來判斷輸入的值所相對應(yīng)的功能板塊。這里也只限制于在正常情況下的輸入輸出。 IO流讀寫 基本功能: 新建文件 查看列表 寫文件 刪除文件 查看文件 導(dǎo)入的包: import java.io.BufferedInputStream; import java.io.Buffe...

    chunquedong 評論0 收藏0
  • 快速Get-JAVA-IO

    摘要:除非文件用自帶的記事本打開我們能夠讀懂,才采用字符流,否則建議使用字節(jié)流。 第四階段 IO IO流 前言: 前面的學(xué)習(xí)我們只能夠在已有的一定封閉范圍內(nèi)進(jìn)行一些操作,但是這顯然是無趣的,也是不支持我們實現(xiàn)一些復(fù)雜的需求,所以Java提供IO流這樣一種概念,方便我們對數(shù)據(jù)進(jìn)行操作 而使用IO流我們可以實現(xiàn)一些強大的功能,例如針對文件的移動復(fù)制等操作,又或者程序與外部文件之間的數(shù)據(jù)存儲或者讀...

    wangzy2019 評論0 收藏0
  • 【freemaker實現(xiàn)導(dǎo)出word②】代碼實現(xiàn)導(dǎo)出word(包括導(dǎo)出list數(shù)據(jù)和導(dǎo)出圖片到wor

    摘要:前面文章已經(jīng)分享了如何創(chuàng)建導(dǎo)出需要用到的模板了,接下來這里要給大家分享的是如何用后臺制作導(dǎo)出的代碼工具和實現(xiàn)??梢灾?,數(shù)據(jù)庫裝載。 前面文章已經(jīng)分享了如何創(chuàng)建導(dǎo)出word需要用到的xml/ftl模板了,接下來這里要給大家分享的是如何用后臺制作導(dǎo)出word的代碼工具和controller實現(xiàn)。 1、首先是工具類,沒有工具,談何實現(xiàn)呢?下面貼我這邊導(dǎo)出word的utils,大家可以直接復(fù)制...

    bitkylin 評論0 收藏0
  • Java IO學(xué)習(xí)筆記二

    摘要:學(xué)習(xí)筆記二流的概念在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來的時候,就要使用輸出流完成。主要功能是向文件中寫入內(nèi)容構(gòu)造函數(shù)根據(jù)給定的對象構(gòu)造一個對象。 Java IO學(xué)習(xí)筆記二 流的概念 在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來...

    ideaa 評論0 收藏0
  • Java編程基礎(chǔ)21——IO(字節(jié)流)

    摘要:流按操作類型分為兩種字節(jié)流字節(jié)流可以操作任何數(shù)據(jù)因為在計算機中任何數(shù)據(jù)都是以字節(jié)的形式存儲的字符流字符流只能操作純字符數(shù)據(jù),比較方便。 1_IO流概述及其分類 1.概念 IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸 Java對數(shù)據(jù)的操作是通過流的方式 Java用于操作流的類都在IO包中 流按流向分為兩種:輸入流,輸出流。 流按操作類型分為兩種: 字節(jié)流 : 字節(jié)流可以操作任何數(shù)據(jù),因為在...

    yanbingyun1990 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<