用java实现 两个工具和一个copy功能
生活随笔
收集整理的這篇文章主要介紹了
用java实现 两个工具和一个copy功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 用java 實現三個工具類
- 1. 輸入路徑,該工具會將該路徑下的所有文件列出來
- 2. 輸入路徑,該工具會將該路徑下的文件、文件夾的數量統計出來
- 3. 實現copy 功能(有點簡陋,,細節沒有處理)
- 后記
- 1. 輸入路徑,該工具會將該路徑下的所有文件列出來
用java 實現三個工具類
1. 輸入路徑,該工具會將該路徑下的所有文件列出來
這個是使用NIO的path和files 來進行的,非常的方便
class T1 {public void ergioc(String path) throws IOException {Files.walkFileTree(Paths.get(path), new SimpleFileVisitor<Path>() {//訪問目錄@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {System.out.println("正在訪問 " + dir + "目錄");return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {return super.visitFileFailed(file, exc);}@Overridepublic FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {//當訪問到目錄之后,出發的方法return super.postVisitDirectory(dir, exc);}@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {System.out.println("正在訪問的文件 : " + file + "文件");return FileVisitResult.CONTINUE;}});} }2. 輸入路徑,該工具會將該路徑下的文件、文件夾的數量統計出來
** 通過簡單的遍歷和遞歸實現的一個小功能,**
class T2 {int dirCount = 0;int fileCount = 0;public void Count1(String path) {File file = new File(path);File[] listFile = file.listFiles();for (int i = 0; i < listFile.length; i++) {if (listFile[i].isDirectory()) {dirCount++;Count1(listFile[i].toString());} else if (listFile[i].isFile()) {fileCount++;} else {Count1(listFile[i].toString());}}}public void sc() {System.out.println("文件數 :" + fileCount);System.out.println("目錄數 : " + dirCount);}}3. 實現copy 功能(有點簡陋,,細節沒有處理)
** 這個沒用NIO2 ,如果有時間的話,我可以嘗試下**
class T3 {//寫一個總的方法來引用這個方法,,然后進行public void toatal(String path , String path1){File file1 = new File(path);File file2 = new File(path1);if (!file2.exists()){System.out.println("暫時沒有寫 合并,,該文件或文件夾已經存在");}else {CountCatalog(path,path1);copyFile(path,path1);}}/*** 如何通過java實現一個cpoy 功能 ; 如果是目錄則遞歸進行復制,如果是文件,則直接復制* 1. 首先 得到想要復制的文件或文件目錄,* 2. 如果是文件目錄得到目錄里面是否有 目錄或者是文件** 首先輸入的路徑是 第一個是被復制的文件或者文件夾 第二是 目的路徑地址**/public void copyFile(String path, String path1) {File file = new File(path);File file1 = new File(path1);File[] listFile = file.listFiles();//如果不行,就用三個方法來合成起來for (int i = 0; i < listFile.length; i++) {if (listFile[i].isDirectory()) {copyFile(listFile[i].toString(), file1.getPath().toString());} else if (listFile[i].isFile()) {String la = listFile[i].toString().substring(11,listFile[i].toString().length());String tmp = file1.toString() + la;File tmp1 = new File(tmp);try {if(tmp1.createNewFile()){FileInputStream fileInputStream = new FileInputStream(listFile[i].toString());FileOutputStream fileOutputStream = new FileOutputStream(tmp);int hasRead = 0;byte[] bbuf = new byte[1024];while ((hasRead = fileInputStream.read(bbuf)) > 0){fileOutputStream.write(bbuf);}System.out.println(tmp +" 創建成功");fileInputStream.close();fileOutputStream.close();}else {System.out.println("文件已經存在");}} catch (IOException e) {e.printStackTrace();}finally {}// 將父目錄代替String mulu1 = listFile[i].toString().replace(la, file1.toString());} else {copyFile(listFile[i].toString(), file1.getPath().toString());}}}/*** 我覺得應該使用遞歸 是更加的方便的,* 1. 首先, 你復制的文件或者目錄是不一樣的,如果是文件 那么 路徑就是代表的文件* 2. 如果是目錄, 但是你復制的目錄的父目錄 然后的子目錄,所以你先要創建父目錄* 3. 或者不是使用遞歸,而是使用樹圖或者說是回溯法,是不更加的方便 ???????????????** @param path*/public void CountCatalog(String path, String path1) {File file = new File(path);File file1 = new File(path1);File[] listFile = file.listFiles();// 首先是不該判斷是否是這個 目錄是否在這個地方是否存在,如果存在,現在現在先不寫合并// 如果沒有 首先你要創建父目錄// 然后通過遞歸得到下面的目錄和文件// 但是 目錄會自動根據文件的絕對路徑進行創建的,所以的,使用mkdirs 可以直接并且非常的方便/*** 現在的難點就是 : 前面獲取的路徑 可是并不能使用啊** 我可以 通過字符串的形式, 去確定修改絕對路徑不就行了嗎*/for (int i = 0; i < listFile.length; i++) {if (listFile[i].isDirectory()) {// 父目錄//父目錄不可變所以提到for語句上面String la = listFile[i].getParent();// 將父目錄代替String mulu1 = listFile[i].toString().replace(la, file1.toString());File tmp = new File(mulu1);// 創建目錄if (tmp.mkdirs()) {System.out.println(mulu1 + " 創建成功");} {System.out.println("文件夾已經存在");}//第二個參數,,只是在每個遞歸中保存這個路徑CountCatalog(listFile[i].toString(), mulu1);}else if (listFile[i].isFile()){} else {CountCatalog(listFile[i].toString(), file1.getPath().toString());}}} }后記
如果你有更好的方法,可以與我分享,
轉載于:https://www.cnblogs.com/YJBlog/p/10440703.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的用java实现 两个工具和一个copy功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【代码笔记】Web-CSS-CSS 链接
- 下一篇: 利用IDM工具下载ESA上的Sentin