Java總結IO篇之File類和Properties類
上篇:File類
File類將 檔案
或 資料夾
封裝成物件
IO流+File
File file = new File(String path); File file = new File(String dir,String fineName); File file = new File(File dir,String fineName);
一、普通測試
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();//虛擬機器退出時刪除,避免刪除臨時檔案前發生異常後刪除不了 }
二、檔案列表
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.刪除一個資料夾內的所有檔案
刪除資料夾,如果裡面有內容,從裡往外刪
不能直接刪除有檔案的資料夾
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+圖片的路徑儲存到了檔案中

儲存檔案列表.png
File物件差不多就這些
下篇:Properties類
HashTable的子類,具有Map的特點,並且鍵值均為 String
Map與IO結合,可用於鍵值對形式的配置檔案,如下面的顏色選擇器

配置檔案.png
一、Properties物件的簡單使用
既然是繼承自HashTable,基本操作應該不在話下,Map中常用put(),get()
為了語義化,Properties類有setProperty()和getProperty()---當然你也可以用put(),get()
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:25spFamily:KaiTiTextColor:red }
//使用map的api遍歷: prop.keySet().iterator().forEachRemaining(key->{ System.out.print(key+":"+prop.get(key)+""); //FontSize:25spFamily:KaiTiTextColor:red });
Properties與檔案IO結合

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");

修改config.png
後記:捷文規範
1.本文成長記錄及勘誤表
專案原始碼 | 日期 | 備註 |
---|---|---|
V0.1--無 | 2018-10-11 | ofollow,noindex">Java總結IO篇之File類和Properties類 |
V0.2--無 | - | - |
2.更多關於我
筆名 | 微信 | 愛好 | |
---|---|---|---|
張風捷特烈 | 1981462002 | zdl1994328 | 語言 |
我的github | 我的簡書 | 我的CSDN | 個人網站 |
3.宣告
1----本文由張風捷特烈原創,轉載請註明
2----歡迎廣大程式設計愛好者共同交流
3----個人能力有限,如有不正之處歡迎大家批評指證,必定虛心改正
4----看到這裡,我在此感謝你的喜歡與支援