黑馬程序員:Java基礎總結----遞歸的應用&File流的應用

黑馬程序員:Java基礎總結



遞歸的應用&File流的應用

 ASP.Net+Android+IO開發.Net培訓、期待與您交流!





遞歸:功能自身的調用

注意事項:
定義遞歸結束的條件;次數不要過多,否則出現StackOverflowError:棧內存溢出錯誤。

例一:
列出指定目錄下文件或者文件夾,包含子目錄中的內容。也就是列出指定目錄下所有內容

       public static void showDir(File dir,int level)
      {
            
             System.out.println( getLevel(level)+dir.getName());

            level++;
            File[] files = dir.listFiles();
             for(int x=0; x<files.length; x++)
            {
                   if(files[x].isDirectory())
                         showDir(files[x],level);
                   else
                         System.out.println( getLevel(level)+files[x]);
            }
      }

例二:
將一個指定目錄下的java文件的絕對路徑,存儲到一個文本文件中。
建立一個java文件列表文件。

思路:
1,對指定的目錄進行遞歸。
2,獲取遞歸過程所以的java文件的路徑。
3,將這些路徑存儲到集合中。
4,將集合中的數據寫入到一個文件中


            File dir = new File("d:\\java1223" );
            List<File> list = new ArrayList<File>();
             fileToList(dir,list);
            File file = new File(dir,"javalist.txt" );
             writeToFile(list,file.toString());

public static void fileToList(File dir,List<File> list)
      {
            File[] files = dir.listFiles();

             for(File file : files)
            {
                   if(file.isDirectory())
                         fileToList(file,list);
                   else
                  {
                         if(file.getName().endsWith(".java" ))
                              list.add(file);
                  }
            }
      }

例三:
刪除一個帶內容的目錄。
刪除原理:
在window中,刪除目錄從裏面往外刪除的。

既然是從裏往外刪除。就需要用到遞歸


File流


       public static void merge() throws IOException {
             ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();

             for (int x = 1; x <= 3; x++) {
                  al.add( new FileInputStream("c:\\splitfiles\\" + x + ".part"));
            }

             final Iterator<FileInputStream> it = al.iterator();

             Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
                   public boolean hasMoreElements() {
                         return it.hasNext();
                  }

                   public FileInputStream nextElement() {
                         return it.next();
                  }
            };

            SequenceInputStream sis = new SequenceInputStream(en);

            FileOutputStream fos = new FileOutputStream("c:\\splitfiles\\0.bmp" );

             byte[] buf = new byte[1024];

             int len = 0;

             while ((len = sis.read(buf)) != -1) {
                  fos.write(buf, 0, len);
            }

            fos.close();
            sis.close();
      }

       public static void splitFile() throws IOException {
            FileInputStream fis = new FileInputStream("c:\\1.bmp" );

            FileOutputStream fos = null;

             byte[] buf = new byte[1024 * 1024];

             int len = 0;
             int count = 1;
             while ((len = fis.read(buf)) != -1) {
                  fos = new FileOutputStream("c:\\splitfiles\\" + (count++) + ".part" );
                  fos.write(buf, 0, len);
                  fos.close();
            }

            fis.close();

      }




 ASP.Net+Android+IO開發.Net培訓、期待與您交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章