IO基礎加強 day01 file文件的基本操作

IO中的分隔符應該用 "/"來表示   而不是"\" 因爲在linux的盤符中無法識別"\""/"可以兼容linux和windows

如  :  d:/abc/123.txt      而不是 d:\abc\123.txt

基本方法

                File f1 = new File("c:/abc","123.txt");
//獲取文件的絕對路徑
String absolutePath = f1.getAbsolutePath();//c:\abc\123.txt
File absoluteFile = f1.getAbsoluteFile();//c:\abc\123.txt
//file和String互相轉換
File f2 = new File(absolutePath);
String path1 = f2.toString();
//獲取文件路徑
String path = f2.getPath();//c:\abc\123.txt
//獲取文件名
String name = f2.getName();//123.txt
//獲取上級文件夾名稱
String parent = f2.getParent();//c:\abc
//獲取上級文件夾
File parentFile = f2.getParentFile();//c:\abc
//file本身也只是一個路徑,跟String是一樣的
---------------------------------------------------------------------
//是否可執行   --只要能打開就算可執行的文件
boolean canExecute = f2.canExecute();//true
//是否可讀    --可讀可寫和系統文件權限有關(可以手動設置)
boolean canRead = f2.canRead();//true
//是否可寫     --可讀可寫和系統文件權限有關(可以手動設置)
boolean canWrite = f2.canWrite();//true
//是否爲隱藏文件
boolean hidden = f2.isHidden();//false
//最後修改時間(格林威治時間)
long lastModified = f2.lastModified();//1527592541180
//字節長度

long length = f2.length();//6       

                File f1 = new File("c:/abc","123333.txt");
//是否是文件
boolean file = f1.isFile();//true
//新建文件   --判斷是否存在,不存在則新建
boolean exists = f1.exists();//false
if(!exists){
boolean createNewFile = f1.createNewFile();
}else{
//存在該文件則重命名
//f1.renameTo(new File("c:/abc/1.txt"));
//刪除文件對象
boolean delete = f1.delete();
//java虛擬機退出時刪除文件對象
f1.deleteOnExit();
}
//創建臨時文件  -- prefix(String)前綴    文件名  --suffix(String)後綴   文件類型  
//--directory(File)存放到哪個文件夾  默認爲windows/Temp文件夾

File.createTempFile("xxx",".textsd",new File("c:/abc"));//C:\abc\xxx7183939415209379196.textsd 

-----------------------------------------------------------------------------------

                File f1 = new File("c:/abc","123333.txt");
//是否爲目錄
boolean directory = f1.isDirectory();//false  非文件夾
//目錄是否存在
boolean exists = f1.exists();//true 存在文件..但是不存在文件夾
File f2 = new File("c:/abc/dis/12");
//創建目錄(單層目錄)  --注意文件和文件夾也不能重名
boolean mkdir = f2.mkdir();
//多層目錄創建(此時用mkdir方法無效)
f2 = new File("c:abc/12/123/aaa");
boolean mkdirs = f2.mkdirs();
//獲取該目錄下的文件的名稱(目錄和文件)
f2 = new File("c:abc");
String[] list = f2.list();
for(String a : list){
System.out.println(a);
}
//獲取該目錄下的文件
File[] listFiles = f2.listFiles();
for (File file : listFiles) {
System.out.println(file);
}
//獲取系統所有磁盤根目錄     C:\  D:\  E:\  F:\  G:\  (只在windows上應用)
File[] listRoots = File.listRoots();
for (File file : listRoots) {
System.out.println(file);

}         

 

 

練習  :找出一個目錄下的所有子文件    遞歸

 

 

        public static void main(String[] args) throws IOException {
File f1 = new File("c:/Program");
File[] listFiles = f1.listFiles();
getFiles(listFiles);
}


private static void getFiles(File[] f) {
for (File file : f) {
if(file.isDirectory()){
getFiles(file.listFiles());
}else{
System.out.println(file);
}
}
}

----文件名過濾器

 

public static void main(String[] args) throws IOException {
File fs = new File("c:/abc");
//獲取目錄下的所有文件
File[] listFiles = fs.listFiles();
for (File file : listFiles) {
System.out.println(file);
}
/* 輸出所有文件和文件夾
    c:\abc\1.txt
c:\abc\12
c:\abc\123.txt
c:\abc\123333.txt
c:\abc\dis
c:\abc\xxx7183939415209379196.textsd
*/
System.out.println("---------------");
//只輸出爲txt類型的文件
File[] listFiles2 = fs.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//要過濾掉文件夾
if(new File(dir,name).isFile() && name.endsWith(".txt")){
return true;
}else{
return false;
}
}
});
for (File file : listFiles2) {
System.out.println(file);
}
/* 只有.txt類型的文件
    c:\abc\1.txt
c:\abc\123.txt
c:\abc\123333.txt 
*/
//可將代碼優化爲     --效果同上
File[] listFiles3 = fs.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//要過濾掉文件夾
return new File(dir,name).isFile() && name.endsWith(".txt");
}
});
 

}

 

 

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