File類
IO流(Input Output) :
IO技術(shù)主要的作用是解決設(shè)備與設(shè)備之間的數(shù)據(jù)傳輸問題
比如: 硬盤--->內(nèi)存、內(nèi)存的數(shù)據(jù)---->硬盤上、 把鍵盤的數(shù)據(jù)------->內(nèi)存中
IO技術(shù)的應(yīng)用場(chǎng)景:
導(dǎo)出報(bào)表、上傳大頭照 、下載 、解釋xml文件 ...
數(shù)據(jù)保存到硬盤上,該數(shù)據(jù)就可以做到永久性的保存。 數(shù)據(jù)一般是以文件的形式保存到硬盤上
sun使用了一個(gè)File類描述了文件或者文件夾的。
File類可以描述一個(gè)文件或者一個(gè)文件夾。
一、File類的構(gòu)造方法
File(String pathname) 指定文件或者文件夾的路徑創(chuàng)建一個(gè)File文件。
File(File parent, String child) 根據(jù) parent 抽象路徑名和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例。
File(String parent, String child)
目錄分隔符: 在windows機(jī)器上的目錄分隔符是 \ ,在linux機(jī)器上的目錄分隔符是/ .通過File.separator就可以獲得對(duì)應(yīng)系統(tǒng)上的分隔符
注意: 在windows上面\ 與 / 都可以使用作為目錄分隔符。 而且,如果寫/ 的時(shí)候只需要寫一個(gè)即可。
public class Demo1 {
public static void main(String[] args) {
//File file = new File("F:"+File.separator+"a.txt"); //
File file = new File("F:/a.txt");
/*File parentFile = new File("F:\\");
File file = new File("F:\\","a.txt");*/
// exists 判斷該文件是否存在,存在返回true,否則返回false。
System.out.println("存在嗎? "+ file.exists());
// System.out.println("目錄分隔符:"+ File.separator);
}
}
路徑問題
- 絕對(duì)路徑: 該文件在硬盤上 的完整路徑。絕對(duì)路徑一般都是以盤符開頭的。
- 相對(duì)路徑: 相對(duì)路徑就是資源文件相對(duì)于當(dāng)前程序所在的路徑。
. 當(dāng)前路徑
.. 上一級(jí)路徑
注意:如果程序當(dāng)前所在的路徑與資源文件不是在同一個(gè)盤下面,是沒法寫相對(duì)路徑的。
public class Demo2 {
public static void main(String[] args) {
File file = new File(".");
System.out.println("當(dāng)前路徑是:"+ file.getAbsolutePath());
File file2 = new File("..\\..\\a.txt");
System.out.println("存在嗎?"+ file2.exists());
}
}
二、創(chuàng)建方法
- createNewFile() 在指定位置創(chuàng)建一個(gè)空文件,成功就返回true,如果已存在就不創(chuàng)建然后返回false
- mkdir() 在指定位置創(chuàng)建目錄,這只會(huì)創(chuàng)建最后一級(jí)目錄,如果上級(jí)目錄不存在就拋異常。
- mkdirs() 在指定位置創(chuàng)建目錄,這會(huì)創(chuàng)建路徑中所有不存在的目錄。
- renameTo(File dest) 重命名文件或文件夾,也可以操作非空的文件夾,文件不同時(shí)相當(dāng)于文件的剪切,剪切時(shí)候不能操作非空的文件夾。移動(dòng)/重命名成功則返回true,失敗則返回false。
public class Demo3 {
public static void main(String[] args) throws IOException {
File file = new File("F:\\aa.txt");
//createNewFile 創(chuàng)建一個(gè)指定的文件,如果該文件存在了,則不會(huì)再創(chuàng)建,如果還沒有存在則創(chuàng)建。
//創(chuàng)建成功返回true,否則返回false。
System.out.println("創(chuàng)建成功了嗎?"+file.createNewFile());
File dir = new File("F:\\a.txt");
System.out.println("創(chuàng)建文件夾成功嗎?"+dir.mkdir()); // mkdir 創(chuàng)建一個(gè)單級(jí)文件夾,
dir = new File("F:\\aa\\bb");
System.out.println("創(chuàng)建多級(jí)文件夾:"+ dir.mkdirs());
//renameTo() 如果目標(biāo)文件與源文件是在同一個(gè)路徑下,那么renameTo的作用是重命名,
//如果目標(biāo)文件與源文件不是在同一個(gè)路徑下,那么renameTo的作用就是剪切,而且還不能操作文件夾。
File destFile = new File("F:\\abc.txt");
System.out.println("重命名成功嗎?"+file.renameTo(destFile)) ;
}
}
三、刪除方法
- delete() 刪除文件或一個(gè)空文件夾,如果是文件夾且不為空,則不能刪除,成功返回true,失敗返回false。
- deleteOnExit() 在虛擬機(jī)終止時(shí),請(qǐng)求刪除此抽象路徑名表示的文件或目錄,保證程序異常時(shí)創(chuàng)建的臨時(shí)文件也可以被刪除
判斷方法:
- exists() 文件或文件夾是否存在。
- isFile() 是否是一個(gè)文件,如果不存在,則始終為false。
- isDirectory() 是否是一個(gè)目錄,如果不存在,則始終為false。
- isHidden() 是否是一個(gè)隱藏的文件或是否是隱藏的目錄。
- isAbsolute() 測(cè)試此抽象路徑名是否為絕對(duì)路徑名。
public class Demo4 {
public static void main(String[] args) {
/*
刪除的。
* File file = new File("F:\\a.txt");
System.out.println("刪除成功嗎? "+ file.delete()); //delete方法不能用于刪除非空的文件夾。 delete方法會(huì)馬上刪除一個(gè)文件。
file.deleteOnExit(); //jvm退出的時(shí)候刪除文件。 一般用于刪除臨時(shí) 文件。
System.out.println("哈哈哈");
判斷
*/
File file = new File("..\\..\\a.txt");
System.out.println("存在嗎?"+ file.exists());
System.out.println("判斷是否是一個(gè)文件:"+file.isFile()); //如果是文件返回true,否則返回false.
System.out.println("判斷是否是一個(gè)文件夾:"+ file.isDirectory()); // 是文件夾返回ture,否則返回false.
System.out.println("是隱藏的 文件嗎:"+ file.isHidden());
System.out.println("是絕對(duì)路嗎?"+ file.isAbsolute());
}
}
四、獲取方法
- getName() 獲取文件或文件夾的名稱,不包含上級(jí)路徑。
- getPath() 返回絕對(duì)路徑,可以是相對(duì)路徑,但是目錄要指定
- getAbsolutePath() 獲取文件的絕對(duì)路徑,與文件是否存在沒關(guān)系
- length() 獲取文件的大?。ㄗ止?jié)數(shù)),如果文件不存在則返回0L,如果是文件夾也返回0L。
- getParent() 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回null。
- lastModified() 獲取最后一次被修改的時(shí)間。
public class Demo5{
public static void main(String[] args) {
File file = new File("..\\..\\a.txt");
System.out.println("文件名:"+ file.getName());
System.out.println("獲取絕對(duì)路徑:"+ file.getPath());
System.out.println("getAbsolutePath獲取絕對(duì)路徑:"+file.getAbsolutePath());
System.out.println("獲取文件的的大小(字節(jié)為單位):"+ file.length());
System.out.println("獲取文件的父路徑:"+ file.getParent());
//使用毫秒值轉(zhuǎn)換成Date對(duì)象
long lastModified = file.lastModified();
Date date = new Date(lastModified);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println("獲取最后一次的修改時(shí)間(毫秒值):"+ dateFormat.format(date) );
}
}
文件夾相關(guān):
- staic File[] listRoots() 列出所有的根目錄(Window中就是所有系統(tǒng)的盤符)
- list() 返回目錄下的文件或者目錄名,包含隱藏文件。對(duì)于文件這樣操作會(huì)返回null。
- listFiles() 返回目錄下的文件或者目錄對(duì)象(File類實(shí)例),包含隱藏文件。對(duì)于文件這樣操作會(huì)返回null。
- list(FilenameFilter filter) 返回指定當(dāng)前目錄中符合過濾條件的子文件或子目錄。對(duì)于文件這樣操作會(huì)返回null。
- listFiles(FilenameFilter filter) 返回指定當(dāng)前目錄中符合過濾條件的子文件或子目錄。對(duì)于文件這樣操作會(huì)返回null。
public class Demo6 {
public static void main(String[] args) {
/*File[] roots = File.listRoots(); //列出所有的根目錄
for(File file : roots){
System.out.println(file);
}*/
File file = new File("F:\\workspace\\mydemo");
/*
String[] fileNames = file.list(); //把當(dāng)前文件夾下面的所有子文件名與子文件夾名 存儲(chǔ)到一個(gè)String類型 的數(shù)組中 返回。
for(String fileName : fileNames){
System.out.println(fileName);
}*/
File[] files = file.listFiles(); // 把當(dāng)前文件夾下面的所有子文件與子文件夾都使用了一個(gè)File對(duì)象描述,然后把這些File對(duì)象存儲(chǔ)到一個(gè)FIle數(shù)組中返回
for(File fileItem : files){
System.out.println("文件名:"+ fileItem.getName());
}
}
}
1.指定一個(gè)文件夾,然后該文件夾下面所有java文件。
2.指定一個(gè)文件夾,然后列出文件夾下面的所有子文件與文件夾,但是格式要如下:
文件:
文件名1
文件名2
文件名3
..
文件夾:
文件夾名1
文件夾名2
文件夾名3
....
demo:
// 自定義一個(gè)文件名過濾器
class MyFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
//System.out.println("文件夾:"+dir+" 文件名:"+ name);
return name.endsWith(".java");
}
}
public class Demo7 {
public static void main(String[] args) {
File dir = new File("F:\\1208\\day06\\代碼\\day06");
listJava2(dir);
}
public static void listJava2(File dir){
File[] files = dir.listFiles(new MyFilter()); //得到文件夾下面的所有子文件與文件夾。
for(File file : files){
System.out.println(file.getName());
}
}
//列出所有的java文件
public static void listJava(File dir){
File[] files = dir.listFiles(); //獲取到了所有的子文件
for(File file : files){
String fileName = file.getName();
/*if(fileName.endsWith(".java")&&file.isFile()){
System.out.println(fileName);
}*/
if(fileName.matches(".+\\.java")&&file.isFile()){
System.out.println(fileName);
}
}
}
public static void listFile(File dir){
File[] files = dir.listFiles();//獲取到所有的子文件
System.out.println("文件:");
for(File fileItem : files){
if(fileItem.isFile()){
System.out.println("\t"+fileItem.getName());
}
}
System.out.println("文件夾:");
for(File fileItem : files){
if(fileItem.isDirectory()){
System.out.println("\t"+fileItem.getName());
}
}
}
}