wordpress調(diào)用js函數(shù)魔方優(yōu)化大師官網(wǎng)下載
文章目錄
- 文件操作和IO
- 文件系統(tǒng)操作
- File介紹
- 屬性
- 構(gòu)造方法
- 方法
- 代碼演示
- 前四個(gè)
- list
- mkdir
- renameTo
文件操作和IO
文件系統(tǒng)操作
創(chuàng)建文件,刪除文件,創(chuàng)建目錄,重命名…
Java中有一個(gè)類,可以幫我們完成上述操作.
這個(gè)類叫做File類.
File介紹
屬性
這個(gè)表格描述了文件路徑的分隔符,由于這個(gè)分隔符在不同的系統(tǒng)上是不一樣的.我們就可以通過上面的屬性來做到平臺無關(guān)化.
構(gòu)造方法
在這些構(gòu)造方法中,我們主要來談第二個(gè)版本File(String pathname)
,使用String作為路徑,我們可以往里面?zhèn)魅虢^對路徑,也可以傳入相對路徑.也可以指定一個(gè)不存在的路徑.如果傳入的是一個(gè)不存在的路徑,那么后續(xù)對該路徑執(zhí)行的操作(如創(chuàng)建文件或目錄)會創(chuàng)建一個(gè)新的文件或目錄。
方法
下面列出了一系列關(guān)于File的操作.
-
getParent()可以返回File對象的父目錄文件路徑.
-
getName()可以返回純文件名稱,也就是demo.txt
-
getPath()可以返回對象的文件路徑.也就是C:\test\demo.txt
-
getAbsolutePath() 可以返回 File 對象的絕對路徑
-
getCanonicalPath() 可以返回 File 對象的修飾過的絕對路徑
-
exists()可以判斷 File 對象描述的文件是否存在.
-
isDirectory() 判斷 File 對象代表的文件是否是一個(gè)目錄
-
isFile()判斷 File 對象代表的文件是否是一個(gè)普通文件.
需要注意的是,在計(jì)算機(jī)的視角下目錄(文件夾)也是文件.
-
createNewFile()顧名思義,創(chuàng)建一個(gè)文件
-
delete()根據(jù) File 對象,刪除該文件,刪除成功后返回true
-
deleteOnExit()這個(gè)刪除比較特殊,它不是立即刪除,而是等到程序執(zhí)行結(jié)束,才刪除.(稍后刪除)
-
list()針對目錄,返回File對象代表的目錄下的所有文件名.
-
listFiles()針對目錄,返回File對象代表的目錄下的所有文件,以File對象表示.(相比于上一個(gè),這個(gè)用的比較多)
-
mkdir()創(chuàng)建目錄,只能創(chuàng)建一級目錄.
-
mkdirs()可以遞歸的創(chuàng)建多級目錄.
mkdir()的時(shí)候,如果中間目錄不存在,則無法創(chuàng)建成功;mkdirs()可以解決這個(gè)問題
-
renameTo(File dest)重命名也可以視為我們平時(shí)的剪切、粘貼操作.
-
canRead()判斷用戶是否對文件有讀權(quán)限
-
canWrite()判斷用戶是否對文件有寫權(quán)限
代碼演示
前四個(gè)
package javaEE.fileIO;import java.io.File;
import java.io.IOException;public class D {public static void main(String[] args) throws IOException {// 由于Windows默認(rèn)使用反斜杠(\)來作為文件路徑的分隔符// 一定要使用雙反斜杠來表示 \\ // 我們也可以使用/來作為文件路徑的分隔符,Windows也支持.File file = new File("C:\\test\\demo.txt");System.out.println(file.getParent());// 打印File對象的父目錄文件路徑.System.out.println(file.getName());// 打印純文件名稱System.out.println(file.getPath());// 打印對象的文件路徑System.out.println(file.getAbsolutePath());// 打印File對象的絕對路徑// getCanonicalPath這個(gè)會拋出IOException異常System.out.println(file.getCanonicalPath());// 打印File對象的修飾過的絕對路徑}
}
此時(shí)我們發(fā)現(xiàn),后三個(gè)打印出來的路徑一樣.
這是咋回事呢?
這主要是因?yàn)槲覀冡槍ile對象進(jìn)行構(gòu)造的時(shí)候,就是拿絕對路徑進(jìn)行構(gòu)造的.
File file = new File("C:\\test\\demo.txt");
如果你是絕對路徑構(gòu)造的,那么getPath()得到的就是絕對路徑,getAbsolutePath()得到的也是絕對路徑,getCanonicalPath()得到的還是絕對路徑.
我們把代碼中的絕對路徑改成相對路徑,再次運(yùn)行一下.
package javaEE.fileIO;import java.io.File;
import java.io.IOException;public class D {public static void main(String[] args) throws IOException {// 由于Windows默認(rèn)使用反斜杠(\)來作為文件路徑的分隔符// 一定要使用雙反斜杠來表示 \\ . 我們也可以使用/來作為文件路徑的分隔符,Windows也支持.File file = new File("./demo.txt");System.out.println(file.getParent());// 打印File對象的父目錄文件路徑.System.out.println(file.getName());// 打印純文件名稱System.out.println(file.getPath());// 打印對象的文件路徑System.out.println(file.getAbsolutePath());// 打印File對象的絕對路徑// getCanonicalPath這個(gè)會拋出IOException異常System.out.println(file.getCanonicalPath());// 打印File對象的修飾過的絕對路徑}
}
我們都知道使用相對路徑時(shí),需要指定一個(gè)基準(zhǔn)路徑.那么以下代碼的基準(zhǔn)路徑是誰呢?
java File file = new File("./demo.txt");
當(dāng)我們通過IDEA運(yùn)行程序時(shí),基準(zhǔn)路徑就是idea打開的這個(gè)項(xiàng)目所在的路徑.
把代碼和運(yùn)行結(jié)果放到一起對照一下,更容易看出區(qū)別.
關(guān)于IOException異常的觸發(fā)情況:
- 硬盤空間不夠
- 沒有權(quán)限
list
package javaEE.fileIO;import java.io.File;
import java.util.Arrays;public class E {public static void main(String[] args) {File file = new File(".");// 打印當(dāng)前目錄下所包含的內(nèi)容System.out.println(Arrays.toString(file.list()));}
}
當(dāng)前目錄
運(yùn)行結(jié)果
直接使用list/listFiles只能看到當(dāng)前目錄中的內(nèi)容.
如果想看到某個(gè)目錄下,所有的目錄和文件,就需要遞歸來完成.
package javaEE.fileIO;import java.io.File;public class F {public static void main(String[] args) {File file = new File(".");scan(file);}private static void scan(File currentDir) {// 判斷當(dāng)前文件是不是目錄if(!currentDir.isDirectory()) {// 不是目錄,直接返回return;}// 列出目錄中包含的內(nèi)容File[] files = currentDir.listFiles();// 判斷目錄是否為空if(files == null || files.length == 0) {// 為空,直接返回return;}// 打印當(dāng)前文件路徑System.out.println(currentDir.getAbsolutePath());// 遍歷整個(gè)目錄for (File file:files) {if(!file.isDirectory()) {// 不是目錄,打印出絕對路徑System.out.println(file.getAbsolutePath());} else {//是目錄,繼續(xù)遞歸scan(file);}}}
}
運(yùn)行結(jié)果
mkdir
package javaEE.fileIO;import java.io.File;public class G {public static void main(String[] args) {File f = new File("./abc");boolean ok = f.mkdir();System.out.println(ok);}
}
renameTo
renameTo改名.
package javaEE.fileIO;import java.io.File;public class H {public static void main(String[] args) {File srcFile = new File("./abc");File destFile = new File("./abc1234");boolean ok = srcFile.renameTo(destFile);System.out.println(ok);}
}
可以看到abc成功改名了.
renameTo還可以用來移動文件,跟剪切的作用很像.
package javaEE.fileIO;import java.io.File;public class I {public static void main(String[] args) {// 將def這個(gè)文件從abc1234文件夾中,移動到當(dāng)前文件夾中File srcFile = new File("./abc1234/def");File destFile = new File("./def");boolean ok = srcFile.renameTo(destFile);System.out.println(ok);}
}
移動文件,就是修改文件所在的路徑,文件路徑的修改,也可以視為是一種"重命名".
沒有演示的方法都十分簡單,這里就不再贅述了~
本文到這里就結(jié)束啦~