Java總結IO篇之File類和Properties類

上篇:File類

File類將文件文件夾封裝成對象
IO流+Filegit

File file = new File(String path);
File file = new File(String dir,String fineName);
File file = new File(File dir,String fineName);

1、普通測試

public class FileDemo {
    public static String path = "I:\\Java\\Base\\Thinking\\src\\IOTest\\File.txt";
    public static String dirPath = "I:\\Java\\Base\\Thinking\\src\\IOTest\\File";
    public static String dirPaths = "I:\\Java\\Base\\Thinking\\src\\IOTest\\a\\b\\c";
    public static File file = new File(path);
    public static File newDir = new File(dirPath);
    public static File newDirs = new File(dirPaths);

    public static void main(String[] args) throws Exception {
//        otherTest();//其餘測試
//        createTest();//建立文件
//        judgeTest();//判斷File文件
//        getInfoTest();//獲取File對象信息
//        deleteTest();//刪除文件
    }
1.其餘測試
String path = "I:\\Java\\Base\\Thinking\\src\\IOTest\\File.txt";
File file = new File(path);
System.out.println(file);//file.toString()返回文件路徑
//I:\Java\Base\Thinking\src\IOTest\File.txt
System.out.println(File.separator);//系統路徑分隔符:\
file.renameTo(new File(file.getParent(), "file.txt"));//重命名到(剪切)
2.建立文件
private static void createTest() throws IOException {
    //返回是否建立成功,若是已經存在,返回false
    System.out.println("建立文件: " + file.createNewFile());//建立文件: true
    System.out.println("建立一級文件夾: " + newDir.mkdir());//建立一級文件夾: true
    System.out.println("建立多級文件夾: " + newDirs.mkdirs());//建立多級文件夾: true
}
3.判斷File文件
private static void judgeTest() {
    System.out.println("文件是否存在" + file.exists());//文件是否存在true
    System.out.println("文件是否可執行: " + file.canExecute());//文件是否可執行: true
    System.out.println("文件是否可讀: " + file.canRead());//文件是否可執行: true
    System.out.println("文件是否可寫: " + file.canWrite());//文件是否可執行: true
    System.out.println("是不是文件: " + file.isFile());//是不是文件: true
    System.out.println("是不是文件夾: " + file.isDirectory());//是不是文件夾: false
    System.out.println("是不是絕對路徑: " + file.isAbsolute());//是不是絕對路徑: true
    System.out.println("是不是隱藏: " + file.isHidden());//是不是隱藏: false
}
4.獲取File對象信息
private static void getInfoTest() {
    System.out.println("路徑: " + file.getPath());
    //路徑: I:\Java\Base\Thinking\src\IOTest\File.txt
    System.out.println("絕對路徑: " + file.getAbsolutePath());
    //絕對路徑: I:\Java\Base\Thinking\src\IOTest\File.txt
    System.out.println("文件名: " + file.getName());//文件名: File.txt
    System.out.println("文件名: " + newDir.getName());//文件名: File
    System.out.println("父文件夾名: " + file.getParent());
    //父文件夾名: I:\Java\Base\Thinking\src\IOTest
    System.out.println("父文件夾對象: " + file.getParentFile());
    //父文件夾對象: I:\Java\Base\Thinking\src\IOTest
    System.out.println("文件所在盤符總大小: " + file.getTotalSpace() / 1024 / 1024 / 1024 + "G");//50G
    System.out.println("文件所在盤符剩餘大小: " + file.getUsableSpace() / 1024 / 1024 / 1024 + "G");//20G
    System.out.println("文件所大小:" + file.length()+"b");//文件所大小:5b
    String time = new SimpleDateFormat("yyyy/MM/dd a hh:mm:ss ").format(file.lastModified());
    System.out.println("最後修改日期: " + time);
    //最後修改日期: 2018/10/10 下午 01:10:17
}
5.刪除文件
private static void deleteTest() {
    System.out.println("刪除文件: " + file.delete());//刪除文件: true
    file.deleteOnExit();//虛擬機退出時刪除,避免刪除臨時文件前發生異常後刪除不了
}

2、文件列表

1.基本使用
private static void listFile() {
    
    File[] files = File.listRoots();//顯示系統盤符
    for (File f : files) {
        System.out.print(f+"  ");
        //C:\  D:\  E:\  F:\  G:\  H:\  I:\  J:\  K:\
    }
    
    String[] list = file.getParentFile().list();
    for (String s : list) {
        System.out.println(s);
    }
    //a
    //Activity.md
    //BufferedWriter.txt
    //fate.jpg
    //File
    //file.txt
    //FileInputStream.txt
    //FileWriter.txt
    //video.avi
    //《吸血鬼日記》原著英文.txt
    //鍵盤錄入
    //鍵盤錄入-GKB
    //鍵盤錄入-UTF-8
    
    File[] listFiles = file.getParentFile().listFiles(new FilenameFilter()
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(".txt");//過濾掉.txt之外的文件
        }
    });
    for (File lf : listFiles) {
        System.out.println(lf);
        //I:\Java\Base\Thinking\src\IOTest\BufferedWriter.txt
        //I:\Java\Base\Thinking\src\IOTest\file.txt
        //I:\Java\Base\Thinking\src\IOTest\FileInputStream.txt
        //I:\Java\Base\Thinking\src\IOTest\FileWriter.txt
        //I:\Java\Base\Thinking\src\IOTest\《吸血鬼日記》原著英文.txt
    }
}
2.刪除一個文件夾內的全部文件

刪除文件夾,若是裏面有內容,從裏往外刪
不能直接刪除有文件的文件夾github

private static void deleteDir(File dir) {
    for (File file : dir.listFiles()) {
        if (file.isDirectory()) {
            deleteDir(file);
        } else {
            String name = file.getName();
            boolean ok = file.delete();
            System.out.println(ok ? "成功刪除--" + name : "刪除失敗--" + name);
        }
    }
    dir.delete();
}
3.將某文件加圖片的路徑保存到目標文件
public class OpenDir {
    public static void main(String[] args) {
        File file = new File("E:\\UI");
        List<File> list = new ArrayList<>();
        fileToList(file, list);
        System.out.println(list.size());
        write2File(list, "F:\\list.txt");
    }

    /**
     * 將某文件夾的圖片文件加入list中
     * @param dir 目標文件夾
     * @param list 列表
     */
    private static void fileToList(File dir, List<File> list) {
        for (File file : dir.listFiles()) {
            if (file.isDirectory()) {
                fileToList(file, list);
            } else {
                if (file.getName().endsWith(".png")||file.getName().endsWith(".jpg")) {
                    list.add(file);
                }
            }
        }
    }

    /**
     * 將文件列表每項的路徑保存到目標文件
     * @param list
     * @param target
     */
    public static void write2File(List<File> list, String target) {
        BufferedWriter bfw = null;
        try {
            bfw = new BufferedWriter(new FileWriter(target));
            for (File file : list) {
                String path = file.getAbsolutePath();
                bfw.write(path);
                bfw.newLine();
                bfw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bfw != null) {
                    bfw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

60000+圖片的路徑保存到了文件中編程

9414344-6697cf2b653ecebc.png
保存文件列表.png

File對象差很少就這些api


下篇:Properties類

HashTable的子類,具備Map的特色,而且鍵值均爲String
Map與IO結合,可用於鍵值對形式的配置文件,以下面的顏色選擇器微信

9414344-e7edec23372f4f9f.png
配置文件.png

1、Properties對象的簡單使用

既然是繼承自HashTable,基本操做應該不在話下,Map中經常使用put(),get()
爲了語義化,Properties類有setProperty()和getProperty()---固然你也能夠用put(),get()ide

1.存儲與獲取
public class PropertiesTest {
    public static void main(String[] args) {
        Properties prop = new Properties();
        prop.put("TextColor", "red");
        prop.put("FontSize", "25sp");

        System.out.println(prop);//{FontSize=25sp, TextColor=red}
        System.out.println(prop.getProperty("TextColor"));//red
    }
}
2.遍歷
//獲取鍵的集合
Set<String> keys = prop.stringPropertyNames();
for (String key : keys) {
    System.out.print(key+":"+prop.getProperty(key)+"  ");
    //FontSize:25sp  Family:KaiTi  TextColor:red
}
//使用map的api遍歷:
prop.keySet().iterator().forEachRemaining(key->{
    System.out.print(key+":"+prop.get(key)+"  ");
    //FontSize:25sp  Family:KaiTi  TextColor:red
});

Properties與文件IO結合

9414344-c11d8682925468ff.png
config.png
1.若是沒有Properties對象:囉嗦一大堆

打開顏色選擇器 :讀流I-->字符串分割-->字符串存入Map-->使用Map對象還原用戶配置
修改配置時 :寫流O-->建立Map對象-->字符串拼接-->字符串存入配置文件測試

private static void useHashMapReadConfig() throws IOException {
    //將配置文件讀入hashMap對象
    String configPath = "I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini";
    BufferedReader bfr = new BufferedReader(new FileReader(configPath));
    HashMap<String, String> hashMap = new HashMap<>();
    String line = null;
    while ((line = bfr.readLine()) != null) {
        String[] split = line.split("=");
        hashMap.put(split[0], split[1]);
    }
    bfr.close();
    System.out.println(hashMap);
    //{FontSize=25sp, Family=KaiTi, TextColor=red}
}
使用Properties對象:兩行搞定

打開顏色選擇器:讀流I-->使用Properties對象還原用戶配置
關閉顏色選擇器:寫流O-->使用Properties對象修改配置文件網站

Properties prop = new Properties();
prop.load(new FileInputStream("I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini"));
System.out.println(prop);//{FontSize=25sp, Family=KaiTi, TextColor=red}
list方法:能夠指定輸出流
prop.list(System.out);
//-- listing properties --
//FontSize=25sp
//Family=KaiTi
//TextColor=red
3.修改配置文件並保存
prop.setProperty("TextColor", "blue");
 //修改後須要用store保存到文件中,不然修改無效
 prop.store(new FileOutputStream("I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini"),"toly--mod");
9414344-45ed7e0295c3c9b5.png
修改config.png

後記:捷文規範

1.本文成長記錄及勘誤表
項目源碼 日期 備註
V0.1--無 2018-10-11 Java總結IO篇之File類和Properties類
V0.2--無 - -
2.更多關於我
筆名 QQ 微信 愛好
張風捷特烈 1981462002 zdl1994328 語言
個人github 個人簡書 個人CSDN 我的網站
3.聲明

1----本文由張風捷特烈原創,轉載請註明
2----歡迎廣大編程愛好者共同交流
3----我的能力有限,若有不正之處歡迎你們批評指證,一定虛心改正
4----看到這裏,我在此感謝你的喜歡與支持.net

相關文章
相關標籤/搜索