隨筆 - 19  文章 - 0  trackbacks - 0
          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          File類:
          用來將文件或者文件夾封裝成對象
          方便對文件或者文件夾的操作
          File對象可以作為參數傳遞給一個流.
          遞歸:
          函數自己調用自己
          應用場景:
          當某一個功能需要重復調用..
          1.遍歷一個文件,并且讓讓這個文件寫入到一個文本里面,(需要樹狀的排序)

           1 package com.javami.kudy.CodeAM;
           2 import java.io.BufferedWriter;
           3 import java.io.IOException;
           4 import java.io.File;
           5 /*
           6  * getSpace
           7  * listAllFiles
           8  */
           9 public class FileList {
          10     public static void main(String[]args)
          11     {
          12         File file = new File("F:/test");
          13         BufferedWriter bw = null;
          14         int val = 0; //默認為零
          15         listAllFiles(file,val);
          16     }
          17 
          18     /*
          19      *遍歷出所有文件夾和文件,用到ListFiles()
          20      *2.利用增強for遍歷所有的目錄下的文件和文件夾()
          21      *3.輸出文件的絕對路徑
          22      *4.如果是目錄的,咱們就遞歸
          23      *
          24      *
          25      */
          26     private static void listAllFiles(File dir,int val)    
          27     {    
          28         File[] files = dir.listFiles();
          29         for(File file : files)
          30         {
          31             System.out.println(getSpace(val)+file.getAbsolutePath());
          32             if(file.isDirectory())//當你迭代到沒有目錄的時候,就結束.
          33             {
          34                 listAllFiles(file,val+1);  //首先從這里邊標記一下+多少個
          35             }
          36         }
          37     }
          38 
          39     private static String getSpace(int val)
          40     {
          41         String line = "-|"; 
          42         for(int i=0; i<val; i++)
          43         {
          44             line+="-";
          45         }
          46         return line;
          47     }
          48 }

          2.刪除一個目錄(利用遞歸實現)

           1 package com.javami.kudy.CodeAM;
           2 import java.io.File;
           3 public class DeleteDirTest {
           4     /*
           5      * 刪除一個目錄
           6      * (注意: 首先要把里面的文件刪除才可以刪除一個目錄)
           7      * delete(刪除抽象路徑名表示的目錄或者文件)
           8      * 思路: 
           9      * 首先判斷如果是否是目錄(遞歸,利用listFiles是一個抽象的文件路徑),如果不是目錄.就直接刪除.
          10      */
          11     public static void main(String[]args)
          12     {
          13         File f = new File("F:/復件 復件 a"); 
          14         deleteDir(f);
          15     }
          16 
          17     private static void deleteDir(File f)
          18     {
          19         if(f.isDirectory()) //判斷是否是一個目錄  //遞歸完是會出來的
          20         {
          21             File [] files = f.listFiles(); //如果是目錄,遞歸/找里面的目錄執行重復一個過程
          22             for(File file : files)  //   a / b / cc    a / b
          23             {
          24                 deleteDir(file); //遞歸最終都是會走出來的
          25             }
          26         }
          27         f.delete(); //我不管你是目錄還是什么.都給我刪除
          28     }
          29     }

          3.指定一個目錄,把java文件寫入到一個文本里面去.  集合 寫入..

            1 package com.javami.kudy.CodeAM;
            2 
            3 import java.io.BufferedReader;
            4 import java.io.BufferedWriter;
            5 import java.io.File;
            6 import java.io.FileWriter;
            7 import java.io.IOException;
            8 import java.io.InputStreamReader;
            9 import java.util.ArrayList;
           10 public class javaFileList {
           11     private static int val;
           12 
           13 
           14     /*
           15      * 指定一個目錄,把java文件寫入到一個文本里面去.  
           16      * 必須要利用過濾器功能去實現
           17      * 要實現一個規范化
           18      * 
           19      * 總結: 注意流的寫法,如果寫流的,必須要在外面正確創建,才可以正確關閉流.
           20      * 要不然刷新不了 - - !懂了..有收獲了...
           21      */
           22     public static void main(String[]args)
           23     {
           24         ArrayList<File> al = new ArrayList<File>();
           25         BufferedReader br = null;
           26         BufferedWriter bw = null;
           27         int val = 0;
           28         try
           29         {
           30             br = new BufferedReader(new InputStreamReader(System.in));
           31             bw = new BufferedWriter(new FileWriter("src/369.txt"));
           32             javaArrList(getDir(br),al,val);
           33             listFilePath(al,bw);
           34         }
           35         catch(IOException e)
           36         {
           37             e.printStackTrace();
           38         }
           39         finally
           40         {
           41             try
           42             {
           43                 CloseUtil.close(br, bw);
           44             }
           45             catch(IOException e)
           46             {
           47                 e.printStackTrace();
           48             }
           49         }
           50         
           51     }
           52     
           53 
           54     /*
           55      * 1.樹形結構
           56      */
           57     private static String getSpack(int val) {
           58         String spack = "-|";
           59         for(int i=0 ;i<val; i++)
           60         {
           61             spack+="-";
           62         }
           63         return spack;
           64     }
           65     
           66     /*
           67      * 2.請用戶輸入一個路徑
           68      */
           69     private static File getDir(BufferedReader br) throws IOException
           70     {
           71                     
           72         String dir = null;
           73         System.out.println("請輸入一個目錄:");
           74         while(true)
           75         {
           76             dir = br.readLine(); //讀取
           77             /*
           78              * 判斷它是否是一個目錄, 判斷這個文件夾是否存在
           79             */
           80             File file = new File(dir); //封裝一個路徑
           81             if(!file.exists())
           82             {
           83                 System.out.println("該文件不存在,請重新輸入");
           84                 continue;
           85             }
           86             if(!file.isAbsolute())
           87             {
           88                 System.out.println("不是一個目錄,請重新輸入:");
           89                 continue;
           90             }
           91             break;
           92         }
           93         return new File(dir);
           94     }
           95     
           96     /*
           97      *第三: 把遞歸到的java文件保存到集合里面
           98      */
           99     private static void javaArrList(File dir, ArrayList<File> al,int val)
          100     {
          101         File[] files = dir.listFiles();
          102         if(files ==null)
          103             return ;        
          104         for(File file : files)
          105         {
          106             if(file.isDirectory()) //如果是一個目錄.咱們要遞歸它
          107                 javaArrList(file, al,val+1);
          108             else if(file.getName().endsWith(".java"))
          109             {
          110                 al.add(file);
          111             }//如果里面的目錄名是以java為結尾的  就把它放到集合里面去
          112         }
          113         
          114     }
          115     /*
          116      * 第四.把集合寫入到一個文件里面
          117      */
          118     private static void listFilePath(ArrayList<File> al,BufferedWriter bw)  throws IOException{ 
          119         
          120         for(File f : al)
          121         {
          122              bw.write(getSpack(val)+f.getAbsolutePath());
          123              bw.newLine();
          124             // bw.flush();
          125         }
          126     }
          127 
          128 
          129 }

          4.指定一個目錄,使其刪除:

           1 package com.javami.kudy.CodeAM;
           2 import java.io.BufferedReader;
           3 import java.io.File;
           4 import java.io.IOException;
           5 import java.io.InputStreamReader;
           6 public class DeleteDirTest {
           7     public static void main(String[]args)
           8     {
           9         /*
          10          * 請輸入一個目錄,把目錄里面的內容刪除
          11          * (空文件才可以刪除目錄)
          12          */
          13         BufferedReader br = null;
          14         try
          15         {
          16             br = 
          17                 new BufferedReader(new InputStreamReader(System.in));
          18             deleteDir(getDir(br)); //刪除一個目錄
          19         }catch(IOException e)
          20         {
          21             e.printStackTrace();
          22         }
          23         finally
          24         {
          25             try
          26             {
          27                 br.close();
          28             }catch(IOException e)
          29             {
          30                 e.printStackTrace();
          31             }
          32         }
          33     }
          34 
          35     /*
          36      * 1.生成一個目錄
          37      */
          38     private static File getDir(BufferedReader br)throws IOException {
          39         String dir = null;
          40         System.out.println("請輸入一個目錄:");
          41         while(true)
          42         {
          43             dir = br.readLine();
          44             File file = new File(dir);
          45             if(!file.exists()){//判斷該文件是否存在
          46                 System.out.println("該文件不存在,請重新輸入:");
          47                 continue;
          48             }
          49             if(!file.isDirectory()){
          50                 System.out.println("該目錄不存在.請重新輸入:");
          51                 continue;
          52             }
          53             break;
          54         }
          55         System.out.println("目錄已經成功創建");
          56         return new File(dir);
          57     }
          58     /*
          59      * 2.刪除一個目錄
          60      */
          61     private static void deleteDir(File dir) {    
          62         if(dir.isDirectory())  //首先判斷是否是目錄
          63         {
          64             File[] files = dir.listFiles();  //把目錄放到數組里面去
          65             for(File file : files) //遍歷里面 的內容
          66             {
          67                 deleteDir(file); //如果是目錄就遞歸  ,遞歸完畢最終會返回到跟目錄
          68             }
          69         }
          70         dir.delete(); //這一步每次遞歸都會執行刪除一次..
          71 
          72         
          73     }
          74     }

          5.拷貝一個目錄:

            1 package com.javami.kudy.CodeAM;
            2 import java.io.BufferedInputStream;
            3 import java.io.BufferedOutputStream;
            4 import java.io.File;
            5 import java.io.FileInputStream;
            6 import java.io.FileOutputStream;
            7 import java.io.IOException;
            8 public class CopyDir {
            9     public static void main(String[]args)
           10     {
           11         /*
           12          * 拷貝一個目錄
           13          * 1.首先要判斷是否是標準文件或者是一個目錄
           14          * 如果是    在目標目錄下創建一個同名的目錄
           15          *         遍歷目錄,遞歸,將目錄下的所有文件拷貝至新創建的目錄
           16          * 如果是標準文件,在目標目錄下創建同名文件,通過IO流來進行拷貝.
           17          */
           18         File a = new File("F:/a");
           19         File b = new File("F:/b");
           20         try
           21         {
           22             copyDir(a, b);
           23         }catch(IOException e)
           24         {
           25             e.printStackTrace();
           26         }
           27     }
           28 
           29     private static void copyDir(File a, File b)throws IOException {
           30         if(a.isDirectory())  //判斷是否是一個目錄
           31         {
           32             //如果是目錄,封裝新目錄的路徑
           33             File newDir = new File(b,a.getName());
           34             //創建一個新目錄
           35             newDir.mkdir();
           36             File[] files = a.listFiles(); //里面的路徑
           37             for(File file : files)
           38             {
           39                 copyDir(file, newDir);
           40             }
           41         }else //這里面的只有文件
           42         {
           43             File newFile = new File(b,a.getName()); //如果沒有這個文件.以下語句會創建一個空文件
           44             newFile.createNewFile(); //如果沒有這個路徑,則創建的意思.名字以上
           45             //把a目錄下面的文件寫入到b目錄下面來
           46             copyFile(a,newFile);  //a里面代表的是一個文件  newFile也是代表一個文件(等待寫入數據的)
           47         }
           48     }
           49     
           50     /*
           51      * 把a里面的文件復制到f里面去
           52      * 
           53      */
           54     private static void copyFile(File a, File f) throws IOException
           55     {
           56         BufferedInputStream bis = null;
           57         BufferedOutputStream bos = null;
           58         try
           59         {
           60             //其實a里面封裝的假設是: f:a/1.txt 注意類型的關系(file文件可以直接仍進去.)
           61             //不能寫成"a"這樣就是放了一個a路徑進去啦
           62             //
           63             bis =
           64                 new BufferedInputStream(new FileInputStream(a));//代表是a是一個文件
           65             bos = 
           66                 new BufferedOutputStream(new FileOutputStream(f)); //代表是一個同名的a文件,只不過是空的
           67             int ch;
           68             while((ch=bis.read())!=-1)
           69             {
           70                 bos.write(ch);
           71             }
           72         }finally
           73         {
           74             try
           75             {
           76                 if(bis!=null)
           77                     bis.close();
           78             }
           79             finally
           80             {
           81                 if(bos!=null)
           82                     bos.close();
           83             }
           84         }
           85     }
           86     
           87 }
           88 遍歷指定目錄下的所有java文件,拷貝到F盤下指定的一個目錄下.    如果是為java結尾的文件.咱們要把它的名字更改成jdk
           89 
           90 package com.javami.kudy.CodeAM;
           91 import java.io.BufferedReader;
           92 import java.io.BufferedWriter;
           93 import java.io.File;
           94 import java.io.FileReader;
           95 import java.io.FileWriter;
           96 import java.io.IOException;
           97 import java.io.InputStreamReader;
           98 public class JavaFileCopy {
           99     public static void main(String[]args)
          100     {
          101         try
          102         {
          103             listJAVAFile(getDir());
          104         }
          105         catch(IOException e)
          106         {
          107             e.printStackTrace();
          108         }
          109     }
          110     
          111 
          112     /*
          113      * 1.獲取到一個目錄
          114      */
          115     private static File getDir()throws IOException
          116     {
          117         BufferedReader br = 
          118                     new BufferedReader(new InputStreamReader(System.in));
          119         String dir = null;
          120         System.out.println("請輸入一個目錄:");
          121         while(true)
          122         {
          123             dir = br.readLine();
          124             File file = new File(dir); //封裝一個這個路徑
          125             if(!file.exists())
          126             {
          127                 System.out.println("該文件不存在!請重新輸入:");
          128                 continue;
          129             }
          130             if(!file.isDirectory())
          131             {
          132                 System.out.println("該目錄不存在,請重新輸入:");
          133                 continue;
          134             }
          135             break;
          136         }
          137         return new File(dir);
          138     }

          6.遍歷指定目錄下的所有java文件,拷貝到F盤下指定的一個目錄下. 如果是為java結尾的文件.咱們要把它的名字更改成jdk

            1 package com.javami.kudy.CodeAM;
            2 import java.io.BufferedReader;
            3 import java.io.BufferedWriter;
            4 import java.io.File;
            5 import java.io.FileReader;
            6 import java.io.FileWriter;
            7 import java.io.IOException;
            8 import java.io.InputStreamReader;
            9 public class JavaFileCopy {
           10     public static void main(String[]args)
           11     {
           12         try
           13         {
           14             listJAVAFile(getDir());
           15         }
           16         catch(IOException e)
           17         {
           18             e.printStackTrace();
           19         }
           20     }
           21     
           22 
           23     /*
           24      * 1.獲取到一個目錄
           25      */
           26     private static File getDir()throws IOException
           27     {
           28         BufferedReader br = 
           29                     new BufferedReader(new InputStreamReader(System.in));
           30         String dir = null;
           31         System.out.println("請輸入一個目錄:");
           32         while(true)
           33         {
           34             dir = br.readLine();
           35             File file = new File(dir); //封裝一個這個路徑
           36             if(!file.exists())
           37             {
           38                 System.out.println("該文件不存在!請重新輸入:");
           39                 continue;
           40             }
           41             if(!file.isDirectory())
           42             {
           43                 System.out.println("該目錄不存在,請重新輸入:");
           44                 continue;
           45             }
           46             break;
           47         }
           48         return new File(dir);
           49     }
           50     /*
           51      * 遍歷所有目錄下的java文件.
           52      */
           53     private static void listJAVAFile(File dir)throws IOException
           54     {
           55         File[] files = dir.listFiles();
           56         
           57         for(File file : files)
           58         {
           59             //如果是目錄,就遞歸.
           60             if(file.isDirectory()) //判斷是否是目錄
           61             {
           62                 listJAVAFile(file);
           63             }
           64             //如果是文件.并且是java為結尾的文件.獲取文件名,替換文件名,創建新文件
           65             else if(file.getName().endsWith(".java")); //獲取這個文件名
           66             {
           67                 //獲取到一個文件名 
           68                 String fileName = file.getName();
           69                 //把文件名修改成jdk 
           70                 String newFileName = fileName.replaceAll(".java$", ".jdk");
           71                 //從 f:/dj目錄下創建文件
           72                 File newFile = new File("f:/dj",newFileName);  //XX.jdk
           73                 newFile.createNewFile(); //如果這個路徑不存在.存在一個與之同名的文件  //**.jdk結果
           74                 copyfile(file,newFile);
           75                 //file:是一個java文件  而newFile文件是一個為jdk為結果的文件
           76             }
           77         }
           78     }
           79 
           80 
           81     private static void copyfile(File file, File newFile)throws IOException
           82     {
           83         BufferedReader br = null;
           84         BufferedWriter bw = null;
           85         try
           86         {
           87             br = new BufferedReader(new FileReader(file));//file代表的是一個java的路徑
           88             bw = new BufferedWriter(new FileWriter(newFile));//是一個jdk的file文件的復制品
           89             String line = null;
           90             while((line=br.readLine())!=null)
           91             {
           92                 bw.write(line);
           93                 bw.newLine();
           94             }
           95         }finally
           96         {
           97             try
           98             {
           99                 CloseUtil.close(br, bw);
          100             }catch(IOException e)
          101             {
          102                 e.printStackTrace();
          103             }
          104         }
          105     }
          106 }

          這次學習個人的心得總結:
          在這個關閉一個流上面有所收獲.第二: 必須要正確的了解遞歸,這個其實不難- >但要想從一個深入的角度去理解,應用.還是需要多加復習與鍛煉的,遞歸最主要的目前對于我個人了解:
          判斷是否是一個目錄,判斷是否是一個文件夾  .  遞歸 : a --> b --> c它最終會返回最高處的那個目錄.
          這里面寫一個簡單的遞歸.

           1 package com.javami.kudy.CodeAM;
           2 
           3 import java.io.File;
           4 
           5 public class Test {
           6     public static void main(String[]args)
           7     {
           8         /*
           9          * 簡單的遞歸
          10          */
          11         File file = new File("F:/a");
          12         listArr(file);
          13 
          14     }
          15     public static void listArr(File file)
          16     {
          17         File[]files = file.listFiles();
          18         for(File f : files)
          19         {
          20             //判斷是否是一個目錄
          21             if(f.isDirectory())
          22             {
          23                 listArr(f);//注意遞歸
          24             }
          25             System.out.println(f.getAbsolutePath()); //如果不是目錄.就輸出
          26         }
          27     }
          28 }

           

          posted on 2012-08-11 22:48 、小細 閱讀(186) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 杭锦旗| 长宁区| 朝阳县| 邢台市| 阿鲁科尔沁旗| 贺兰县| 巴南区| 柳林县| 台北县| 济宁市| 雷州市| 大名县| 重庆市| 东乌| 武城县| 麻城市| 锡林浩特市| 金川县| 新津县| 昌平区| 东兰县| 简阳市| 利川市| 富源县| 宁远县| 武鸣县| 萨迦县| 雷波县| 克山县| 乡宁县| 上杭县| 尖扎县| 景洪市| 华安县| 乌审旗| 开原市| 临猗县| 海丰县| 昌都县| 水城县| 布拖县|