[英]File listing in Java. A fresh look
這個問題很簡單,但是我的大腦沸騰了:((((我知道我應該遞歸函數,但是我不能適當地組織它,因為我受類型的限制(這是必要條件)
public String[] getFiles(String initialDir) {}
首先,在我的代碼中,我獲得了initialDir的文件和目錄的列表,然后遍歷所有元素,並借助以下命令查找目錄
.isDirectory()
然后我嘗試組織遞歸,例如:
String [] buf = getFiles(Filelist[i].toString());
麻煩來了
主要問題是,確定獲得的數據的大小並分配String []類型的必要數組,然后將所有遞歸結果和首次調用結果寫入String []類型的結果數組。
這真的讓我很煩,所以我需要換個角度看(也許有人會幫助您編寫函數中的代碼)。
謝謝大家!
您可以在方法的主體中使用列表,然后將其轉換為數組:
public String[] getFiles(String initialDir) {
List<String> files = new ArrayList<String>();
...
files.add(aLovelyFile);
...
String[] moarFiles = getFiles(aLovelyDirectory);
files.addAll(Arrays.asList(moarFiles));
...
return files.toArray(new String[0]);
}
如果這不是家庭作業,請查看Apache Commons,特別是FileUtils#ListFiles :
在給定目錄(及其子目錄)中查找文件。 找到的所有文件均由IOFileFilter過濾。 如果您的搜索應遞歸到子目錄,則可以傳遞IOFileFilter作為目錄。 您無需將DirectoryFileFilter(通過邏輯AND)綁定到此過濾器。 這種方法為您做到了。
示例:如果要搜索所有名為“ temp”的目錄,請傳入FileFilterUtils.NameFileFilter(“ temp”)
這將返回Collection<File>
。 可能正是您想要的。 當然,如果需要返回數組,請在末尾使用.toArray()
。
如果確實需要使用數組,但仍然不是家庭作業,那么可以使用Apache commons lang連接兩個數組:
String[] both = (String[]) ArrayUtils.addAll(first, second);
上面的內容是從答案中復制過來的,該答案如何在Java中連接兩個數組? ,這將為您提供所有想要的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.