Java API —— File類

一、File類的概述
        文件和目錄路徑名的抽象表示形式,建立File對象後,僅僅是一個路徑的表示,不代碼具體的事物必定是存在的。
二、構造方法
        · public File(String pathname):根據一個路徑獲得File對象
        · public File(String parent,String child):根據一個目錄和一個子文件/目錄獲得File對象
        · public File(File parent,String child):根據一個父File對象和一個子文件/目錄獲得File對象
package filedemos;
import java.io.File;
/**
 * Created by gao on 15-12-25.
 */
public class FileDemo01 {
    public static void main(String[] args) {
        // File(String pathname):根據一個路徑獲得File對象
        // 把c:\\demo\\a.txt封裝成一個File對象
        File file = new File("C:\\demo\\a.txt");
        // File(String parent, String child):根據一個目錄和一個子文件/目錄獲得File對象
        File file2 = new File("C:\\demo","a.txt");
        // File(File parent, String child):根據一個父File對象和一個子文件/目錄獲得File對象
        File file3 = new File("C:\\demo");
        File file4 = new File(file3,"a.txt");
        // 以上三種方式其實效果同樣,經常使用第一種
    }
}

三、建立功能java

        · public boolean createNewFile():當且僅當不存在具備此抽象路徑名指定名稱的文件時,不可分地建立一個新的空文件。
        · public boolean mkdir():建立此抽象路徑名指定的目錄。
        · public boolean mkdirs():建立此抽象路徑名指定的目錄,包括全部必需但不存在的父目錄。
package filedemos;
import java.io.File;
import java.io.IOException;
/**
 * Created by gao on 15-12-25.
 */
public class FileDemo02 {
    public static void main(String[] args) throws IOException {
        // 需求:我要在c盤目錄下建立一個文件夾demo
        File file = new File("c:\\demo");
        System.out.println("mkdir:"+file.mkdir()); //第一次執行返回true,第二次執行返回false,若是存在這樣的文件夾就不建立了
        // 需求:我要在c盤目錄demo下建立一個文件a.txt
        File file2 = new File("c:\\demo\\a.txt");
        System.out.println("createNewFile:"+file2.createNewFile());
        // 需求:我要在c盤目錄test下建立一個文件b.txt
        // Exception in thread "main" java.io.IOException: 系統找不到指定的路徑。
        // 注意:要想在某個目錄下建立內容,該目錄首先必須存在。
//        File file3 = new File("c:\\test\\b.txt");
//        System.out.println("createNewFile:"+file3.createNewFile());
        // 需求:我要在e盤目錄test下建立aaa目錄
//        File file4 = new File("c:\\test\\aaa");
//        System.out.println("mkdir:"+file4.mkdir());
//        File file5 = new File("c:\\test");
//        File file6 = new File(file5,"aaa");
//        System.out.println("mkdir:"+file5.mkdir());
//        System.out.println("mkdir:"+file6.mkdir());
        // 其實咱們有更簡單的方法,mkdirs()
        File file7 = new File("c:\\test1\\aaa1");
        System.out.println("mkdirs:"+file7.mkdirs());
        // 到底要建立文件仍是文件夾,方法不要調錯了
        File file8 = new File("c:\\liuyi\\a.txt");
        System.out.println("mkdirs:" + file8.mkdirs());
    }
}

四、刪除功能數組

        · public boolean delete()   
package filedemos;
import java.io.File;
import java.io.IOException;
/**
 * Created by gao on 15-12-25.
 */
/*
 * 刪除功能:public boolean delete()
 * 
 * 注意:
 *         A:若是你建立文件或者文件夾忘了寫盤符路徑,那麼,默認在項目路徑下。
 *         B:Java中的刪除不走回收站。
 *         C:要刪除一個文件夾,請注意該文件夾內不能包含文件或者文件夾
 */
public class FileDemo03 {
    public static void main(String[] args) throws IOException {
        // 建立文件
//        File file = new File("c:\\a.txt");
//        System.out.println("createNewFile:"+file.createNewFile());
        File file = new File("a.txt"); //新建在本項目路徑下
        System.out.println("createNewFile:"+file.createNewFile());
        File file2 = new File("aaa\\bbb\\ccc");
        System.out.println("mkdirs:"+file2.mkdirs());
        // 刪除功能:我要刪除a.txt這個文件
        File file3 = new File("a.txt");
        System.out.println("delete:"+file3.delete());
        // 刪除功能:我要刪除ccc這個文件夾
        File file4 = new File("aaa\\bbb\\ccc");
        System.out.println("delete:"+file4.delete());
        // 刪除功能:我要刪除aaa文件夾
        // File file5 = new File("aaa"); //aaa下面有文件或文件夾,不能刪除
        // System.out.println("delete:" + file5.delete());
        File file6 = new File("aaa\\bbb");
        File file7 = new File("aaa");
        System.out.println("delete:"+file6.delete());
        System.out.println("delete:"+file7.delete());
    }
}
五、重命名功能    
        · public boolean renameTo(File dest)
package filedemos;
import java.io.File;
import java.io.IOException;
/**
 * Created by gao on 15-12-25.
 */
/*
 * 重命名功能:public boolean renameTo(File dest)
 *         若是路徑名相同,就是更名。
 *         若是路徑名不一樣,就是更名並剪切。
 *
 * 路徑以盤符開始:絕對路徑    c:\\a.txt
 * 路徑不以盤符開始:相對路徑    a.txt
 */
public class FileDemo04 {
    public static void main(String[] args) throws IOException {
//        // 建立一個文件對象
        File file = new File("a1.txt");
        System.out.println("createNewFile:"+file.createNewFile());
//
//        // 需求:我要修改這個文件的名稱爲"a2.txt"
//        File file2 = new File("a2.txt");
//        System.out.println("renameTo:"+file.renameTo(file2));//renameTo:true
        //這裏有個疑問?爲何若是我是直接剪切到c盤就不成功
        //可是若是新建一個文件夾在剪切進文件夾裏就會成功??
        File file3 = new File("c:\\aaa");
        System.out.println("mkdir:"+file3.mkdir()); //mkdir:true
        File file4 = new File("c:\\aaa\\a2.txt");
        System.out.println("renameTo:"+file.renameTo(file4)); //renameTo:true
//        File file5 = new File("c:\\a2.txt");
//        System.out.println("renameTo:"+file.renameTo(file5)); //renameTo:false ????
    }
}

六、判斷功能ide

        · public boolean isDirectory():判斷是不是目錄
        · public boolean isFile():判斷是不是文件
        · public boolean exists():判斷是否存在
        · public boolean canRead():判斷是否可讀
        · public boolean canWrite():判斷是否可寫
        · public boolean isHidden():判斷是否隱藏
package filedemos;
import java.io.File;
import java.io.IOException;
/**
 * Created by gao on 15-12-25.
 */
public class FileDemo05 {
    public static void main(String[] args) throws IOException {
        // 建立文件對象
        File file = new File("a.txt");
        System.out.println("createNewFile:"+file.createNewFile());//true
        System.out.println("isDirectory:" + file.isDirectory());// false
        System.out.println("isFile:" + file.isFile());// true
        System.out.println("exists:" + file.exists());// true
        System.out.println("canRead:" + file.canRead());// true
        System.out.println("canWrite:" + file.canWrite());// true
        System.out.println("isHidden:" + file.isHidden());// false
    }
}

七、基本獲取功能學習

        · public String getAbsolutePath():獲取絕對路徑
        · public String getPath():獲取相對路徑
        · public String getName():獲取名稱
        · public long length():獲取長度。字節數
        · public long lastModified():獲取最後一次的修改時間,毫秒值
package filedemos;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * Created by gao on 15-12-25.
 */
public class FileDemo06 {
    public static void main(String[] args) {
        // 建立文件對象
        File file = new File("aaa//a.txt");
        //public String getAbsolutePath():獲取絕對路徑
        System.out.println("getAbsolutePath:" + file.getAbsolutePath());
        //public String getPath():獲取相對路徑
        System.out.println("getPath:" + file.getPath());
        //public String getName():獲取名稱
        System.out.println("getName:" + file.getName());
        //public long length():獲取長度。字節數
        System.out.println("length:" + file.length());
        //public long lastModified():獲取最後一次的修改時間,毫秒值
        System.out.println("lastModified:" + file.lastModified());
        // 1451011896351
        Date d = new Date(1451011896351L);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s = sdf.format(d);
        System.out.println(s);
    }
}

輸出結果:測試

getAbsolutePath:C:\workspace\Exercises\aaa\a.txt
getPath:aaa\a.txt
getName:a.txt
length:0
lastModified:1451011896351
2015-12-25 10:51:36
 
八、高級獲取功能
        · public String[] list():獲取指定目錄下的全部文件或者文件夾的名稱數組
        · public File[] listFiles():獲取指定目錄下的全部文件或者文件夾的File數組
package filedemos;
import java.io.File;
/**
 * Created by gao on 15-12-25.
 */
/*
 * 獲取功能:
 * public String[] list():獲取指定目錄下的全部文件或者文件夾的名稱數組
 * public File[] listFiles():獲取指定目錄下的全部文件或者文件夾的File數組
 */
public class FileDemo07 {
    public static void main(String[] args) {
        // 指定一個目錄
        File file = new File("C:\\package");
        //public String[] list():獲取指定目錄下的全部文件或者文件夾的名稱數組
        String[] strArray = file.list();
        for(String s : strArray){
            System.out.println(s);
        }
        System.out.println("------------");
        // public File[] listFiles():獲取指定目錄下的全部文件或者文件夾的File數組
        File[] fileArray = file.listFiles();
        for(File f : fileArray){
            System.out.println(f.getName());
        }
    }
}

輸出結果:spa

.unz.2.5.3.1066
config.xml
current
update
vxs_pub.key
------------
.unz.2.5.3.1066
config.xml
current
update
vxs_pub.key
 
練習題:判斷E盤目錄下是否有後綴名爲.jpg的文件,若是有,就輸出此文件名稱
package filedemos;
import java.io.File;
/**
 * Created by gao on 15-12-25.
 */
/*
 * 判斷E盤目錄下是否有後綴名爲.jpg的文件,若是有,就輸出此文件名稱
 *
 * 分析:
 *         A:封裝e判斷目錄
 *         B:獲取該目錄下全部文件或者文件夾的File數組
 *         C:遍歷該File數組,獲得每個File對象,而後判斷
 *         D:是不是文件
 *             是:繼續判斷是否以.jpg結尾
 *                 是:就輸出該文件名稱
 *                 否:不搭理它
 *             否:不搭理它
 */
public class FileDemo08 {
    public static void main(String[] args) {
        // 封裝c判斷目錄
        File file = new File("c:\\");
        // 獲取該目錄下全部文件或者文件夾的File數組
        File[] fileArray = file.listFiles();
        // 遍歷該File數組,獲得每個File對象,而後判斷
        for(File f : fileArray){
            // 是不是文件
            if (f.isFile()){
                // 繼續判斷是否以.jpg結尾
                if (f.getName().endsWith(".jpg")){
                    // 就輸出該文件名稱
                    System.out.println(f.getName());
                }
            }
        }
    }
}
九、文件名稱過濾器的實現思想及代碼
        · public String[] list(FilenameFilter filter)
        · public File[] listFiles(FilenameFilter filter)
package filedemos;
import java.io.File;
import java.io.FilenameFilter;
/**
 * Created by gao on 15-12-25.
 */
/*
 * 判斷E盤目錄下是否有後綴名爲.jpg的文件,若是有,就輸出此文件名稱
 * A:先獲取全部的,而後遍歷的時候,依次判斷,若是知足條件就輸出。
 * B:獲取的時候就已是知足條件的了,而後輸出便可。
 *
 * 要想實現這個效果,就必須學習一個接口:文件名稱過濾器
 * public String[] list(FilenameFilter filter)
 * public File[] listFiles(FilenameFilter filter)
 */
public class FileDemo09 {
    public static void main(String[] args) {
        // 封裝c判斷目錄
        File file = new File("c:\\");
        // 獲取該目錄下全部文件或者文件夾的String數組
        // public String[] list(FilenameFilter filter)
        String[] strArray = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // 經過這個測試,咱們就知道了,到底把這個文件或者文件夾的名稱加不加到數組中,取決於這裏的返回值是true仍是false
                // 因此,這個的true或者false應該是咱們經過某種判斷獲得的
                // System.out.println(dir + "---" + name);
                // File file = new File(dir, name);
                // // System.out.println(file);
                // boolean flag = file.isFile();
                // boolean flag2 = name.endsWith(".jpg");
                // return flag && flag2;
                return new File(dir,name).isFile() && new File(dir,name).getName().endsWith(".jpg");
            }
        });
        // 遍歷
        for (String s : strArray) {
            System.out.println(s);
        }
    }
}

輸出結果:code

aa.jpg
bb.jpg
cc.jpg
 
練習題:把E:\評書\三國演義下面的視頻名稱修改成00?_介紹.avi
package cn.itcast_09;
import java.io.File;
/*
 * 需求:把E:\評書\三國演義下面的視頻名稱修改成
 *         00?_介紹.avi
 * 
 * 思路:
 *         A:封裝目錄
 *         B:獲取該目錄下全部的文件的File數組
 *         C:遍歷該File數組,獲得每個File對象
 *         D:拼接一個新的名稱,而後重命名便可。
 */
public class FileDemo {
    public static void main(String[] args) {
        // 封裝目錄
        File srcFolder = new File("E:\\評書\\三國演義");
        // 獲取該目錄下全部的文件的File數組
        File[] fileArray = srcFolder.listFiles();
        // 遍歷該File數組,獲得每個File對象
        for (File file : fileArray) {
            // System.out.println(file);
            // E:\評書\三國演義\三國演義_001_[評書網-今天很高興,明天就IO了]_桃園三結義.avi
            // 改後:E:\評書\三國演義\001_桃園三結義.avi
            String name = file.getName(); // 三國演義_001_[評書網-今天很高興,明天就IO了]_桃園三結義.avi
            int index = name.indexOf("_");
            String numberString = name.substring(index + 1, index + 4);
            // System.out.println(numberString);
            // int startIndex = name.lastIndexOf('_');
            // int endIndex = name.lastIndexOf('.');
            // String nameString = name.substring(startIndex + 1, endIndex);
            // System.out.println(nameString);
            int endIndex = name.lastIndexOf('_');
            String nameString = name.substring(endIndex);
            String newName = numberString.concat(nameString); // 001_桃園三結義.avi
            // System.out.println(newName);
            File newFile = new File(srcFolder, newName); // E:\\評書\\三國演義\\001_桃園三結義.avi
            // 重命名便可
            file.renameTo(newFile);
        }
    }
}
相關文章
相關標籤/搜索