加载指定路径下所有文件
工作中經常遇到加載某個文件夾下的所有文件,然后對文件遍歷,今天寫代碼時遇到一個好的類ArrayDeque,整理一下,做一下筆記
?下面寫了一個測試類
package com.hpzx.test;import java.io.File; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import java.util.Queue;/**加載指定路徑下的所有文件* @author ywf**/ public class ReadFilesTest {/*** @param args*/public static void main(String[] args) {String fileDir = "e:/Users/ywf/Desktop/新詞識別測試數據";List<File> fileList = new ArrayList<File>();Queue<File> quene = new ArrayDeque<File>();quene.add(new File(fileDir));while(quene.size()>0){File file = quene.poll();if(file.isDirectory()){File[] files = file.listFiles();for(File f : files){if(f.isDirectory()){quene.add(f);}else{fileList.add(f);}}}else{fileList.add(file);}}System.out.println(fileList);}}?轉http://blog.csdn.net/kaiwii/article/details/7996111
Queue接口
public abstract boolean add(E paramE);
?
public abstract boolean offer(E paramE);
?
public abstract E remove();
?
public abstract E poll();
?
Queue接口提供了以上幾個方法。
看了ArrayDeque類的源碼。有以下幾點總結:
1)ArrayDeque有兩個類屬性,head和tail,兩個指針。
2)ArrayDeque通過一個數組作為載體,其中的數組元素在add等方法執行時不移動,發生變化的只是head和tail指針,而且指針是循環變化,數組容量不限制。
3)offer方法和add方法都是通過其中的addLast方法實現,每添加一個元素,就把元素加到數組的尾部,此時,head指針沒有變化,而tail指針加一,因為指針是循環加的,所以當tail追上head((this.tail = this.tail + 1 & this.elements.length - 1) == this.head)時,數組容量翻一倍,繼續執行。
4)remove方法和poll方法都是通過其中的pollFirst方法實現,每移除一個元素,該元素所在位置變成null,此時,tail指針沒有變化,而head指針加一,當數組中沒有數據時,返回null。
5)因為ArrayDeque不是線程安全的,所以,用作堆棧時快于?Stack,在用作隊列時快于?LinkedList。
轉載于:https://www.cnblogs.com/yuwenfeng/p/3927189.html
總結
以上是生活随笔為你收集整理的加载指定路径下所有文件的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: lambda显式声明返回值
 - 下一篇: 堆溢出的DWORD Shoot核心原理-