java讀取磁盤并遍歷磁盤文件過程解析
1. 獲取本機所有盤符信息
//1. 獲取本機盤符 File[] roots = File.listRoots(); for (int i = 0; i < roots.length; i++) { System.out.print(roots[i].getPath()+"; ");//磁盤路徑 System.out.print(roots[i].getTotalSpace()/1024/1024/1024+"; ");//磁盤總空間大小 System.out.print(roots[i].getUsableSpace()/1024/1024/1024+"; ");//剩余磁盤空間大小 System.out.println(roots[i].getFreeSpace()/1024/1024/1024);//剩余磁盤空間大小 }
默認獲取磁盤空間單位是BT,操作系統(tǒng)是這樣算的 1G=1024MB, 1MB=1024KB, 1KB=1024BT
以上運行結(jié)果如下:
C:\; 119; 71; 71 D:\; 299; 233; 233 E:\; 309; 308; 308 F:\; 321; 320; 320 W:\; 588; 358; 358
其中W盤為網(wǎng)盤。
2. 僅獲取本地磁盤(除去網(wǎng)絡(luò)磁盤等)
File[] roots = File.listRoots(); FileSystemView sys = FileSystemView.getFileSystemView(); for (int i = 0; i < roots.length; i++) { if(!sys.getSystemTypeDescription(roots[i]).equals("本地磁盤")){ continue; } System.out.println(roots[i].getPath());// 磁盤路徑 }
輸出結(jié)果:
C:\ D:\ E:\ F:\
3.在某一磁盤新建文件
File file = new File("F:\\test\\a\\b"); if (!file.exists()) { file.mkdirs();// 目錄不存在,創(chuàng)建根目錄 }
4. 遍歷某一個盤符的文件
File file = new File("E:\\"); SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); System.out.println(file.getTotalSpace()/1024/1024/1024);// b-kb-M-G if (file.isAbsolute()) { // 判斷是否為根目錄 File[] list = file.listFiles(); // 使用數(shù)組接收帶有完整路徑的文件夾 for (int i = 0; i < list.length; i++) { System.out.println(list[i].getPath()); System.out.println(list[i].getTotalSpace()); System.out.println(dateFormat.format(list[i].lastModified())); } }
5.遍歷某一文件夾下的文件
File file = new File("F:\\test"); getAllFilePath(file); public static void getAllFilePath(File dir){ File[] files=dir.listFiles(); for(int i=0;i<files.length;i++){ if(files[i].isDirectory()){ System.out.println(files[i].getPath()); //這里面用了遞歸的算法 getAllFilePath(files[i]); } else { System.out.println(files[i].getPath()); } } }
輸入結(jié)果:
F:\test\a F:\test\a\b
6. 獲取某一個盤符或文件夾下的所有文件的大小
File file = new File("F:\\test"); getAllFileSize(file); public static long getAllFileSize(File dir){ File[] files=dir.listFiles(); for(int i=0;i<files.length;i++){ if(files[i].isDirectory()){ //這里面用了遞歸的算法 getAllFileSize(files[i]); } else { sum+=files[i].length(); System.out.println(files[i]+"的大?。?+files[i].length()); } } return sum; }
7. 保存文件
File filePath = new File("D:\\11.png"); String fileToday = DateUtils.formatTimeYMD(new Date()); //創(chuàng)建目錄rootPath String rootPath = "E:/fileUpload/"+fileToday+"/"; File file = new File(rootPath); if (!file.exists()) { file.mkdirs();//目錄不存在,創(chuàng)建根目錄 } String picPath = getPath(rootPath, "videoFile"); saveFile(picPath, filePath); private static boolean saveFile(String path,File uploadFile) { //Files.copy(source, out);//可以直接用這個方法保存 int bufferSize = 8192;//8kb //寫文件 try { File f = new File(path+"/", uploadFile.getName()); if (!f.exists()) { f.createNewFile(); } InputStream in = new BufferedInputStream(new FileInputStream(uploadFile),bufferSize); OutputStream out =new BufferedOutputStream(new FileOutputStream(f),bufferSize) ; byte[] buffer = new byte[bufferSize]; int len = 0; while ((len = in.read(buffer)) >0) { out.write(buffer,0,len); } out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; }
如果不需要推送進度的話,可以直接調(diào)用Files.copy(source, out)方法進行復(fù)制文件。
8. 刪除文件
File filePath = new File("D:/home/logs/backupsystem_error.log"); boolean result = filePath.delete();//true表示刪除成功 System.out.println(result);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis游標(biāo)Cursor在Oracle數(shù)據(jù)庫上的測試方式
這篇文章主要介紹了MyBatis游標(biāo)Cursor在Oracle數(shù)據(jù)庫上的測試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作
這篇文章主要介紹了自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Java swing實現(xiàn)音樂播放器桌面歌詞字體變色效果
這篇文章主要為大家詳細介紹了Java swing實現(xiàn)音樂播放器桌面歌詞字體變色效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06關(guān)于MVC與SpringMVC的介紹、區(qū)別、執(zhí)行流程
這篇文章主要介紹了關(guān)于MVC與SpringMVC的介紹、區(qū)別、執(zhí)行流程,MVC框架的主要目標(biāo)是將應(yīng)用程序的業(yè)務(wù)邏輯(Model)與用戶界面(View)分離開來,從而提高應(yīng)用程序的可維護性和可擴展性,需要的朋友可以參考下2023-05-05java 數(shù)據(jù)結(jié)構(gòu)單鏈表的實現(xiàn)
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)單鏈表的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-07Java InheritableThreadLocal用法詳細介紹
InheritableThreadLocal繼承了ThreadLocal,此類擴展了ThreadLocal以提供從父線程到子線程的值的繼承:當(dāng)創(chuàng)建子線程時,子線程接收父線程具有的所有可繼承線程局部變量的初始值。 通常子線程的值與父線程的值是一致的2022-09-09Java實現(xiàn)的文本字符串操作工具類實例【數(shù)據(jù)替換,加密解密操作】
這篇文章主要介紹了Java實現(xiàn)的文本字符串操作工具類,可實現(xiàn)數(shù)據(jù)替換、加密解密等操作,涉及java字符串遍歷、編碼轉(zhuǎn)換、替換等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10