課程
/后端開發
/Java
/文件傳輸基礎——Java IO流
還是沒有搞明白這兩個方法的區別。
他們都可以顯示當前目錄下的所有文件和目錄,
為什么遞歸之后,list仍然顯示當前,沒有遞歸下去。而listFiles卻顯示出來了?
2016-07-17
源自:文件傳輸基礎——Java IO流 2-2
正在回答
詳解list 和listFlile:
首先調用list()方法的話,返回的是一個String類型的字符串數組,它返回的是dir目錄下一級的所有文件的目錄,但它是以字符串的形式存在,然而java并不會識別該字符串類型的目錄,因為java不確定該string是否是一個文件目錄,或者還是只是一個數字或者其他類型的對象,只能簡單的將它顯示出來
然后調用listFile()方法的話,返回的是一個文件類型的文件數組,返回的也是dir目錄下一級的所有文件的目錄,但與string類型不同的是,java可以自動識別文件類型的對象,知道返回的是一個File類型的對象,所以可以調用相應的方法進行遞歸遍歷,而String 類型可能是因為系統沒有配備相應的方法,所以不能做判斷是否是目錄,并且進行遞歸遍歷的操作
首先調用list()方法的話,返回的是一個String類型的字符串數組,它返回的是dir目錄下一級的所有文件的目錄,但它是以字符串的形式存在,然而java并不會識別該字符串類型的目錄,只能簡單的將它顯示出來
對的,就是針對這個問題,我利用將返回的String數組分別創建File對象,然后就可以遞歸調用了。。但不知道是不是因為兩個方法的區別,導致沒有到達遞歸的效果。
String[] file = dir.list();
// for(String temp : file){
// File tempFile = new File(temp);
// System.out.println(dir + "\\" + tempFile);
// System.out.println(tempFile.isDirectory());
// if(tempFile.isDirectory()){
// listDirectory(tempFile);
// System.out.println(dir + "是個目錄");
// }else{
// //System.out.println(dir + "\\" + temp);
// }
嘗試做出解答:
首先,list返回的的是String類型的值,僅僅只是當前目錄下的所有文件和目錄的名稱(假設其中有個xx.txt,返回的只是“xx”,前面沒有“e://a//b”這樣),要分清,這是個字符串String
listFiles返回的是File的對象(類似于你這樣創建的:File file = new File(“E:\\a”);),這個是File類型
最后,要用遞歸的話,public static void listDirectory (File dir) throws IOException {...},這個函數的參數是File類型的,所以想要進行遞歸就得正確地傳入參數,如果你傳入了String類型,自然沒有函數里的屬于File類型的方法,所以無法遞歸。
舉報
為您介紹IO流的使用,以及對象的序列化和反序列化的內容
4 回答list()和listFile()有什么區別?
2 回答InputStreamReader和FileReader的區別
1 回答裝飾器和過濾器的區別
2 回答javaio中目錄和文件 的區別
1 回答“字節的緩沖區”和“字節緩沖流”的區別
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-09-29
詳解list 和listFlile:
首先調用list()方法的話,返回的是一個String類型的字符串數組,它返回的是dir目錄下一級的所有文件的目錄,但它是以字符串的形式存在,然而java并不會識別該字符串類型的目錄,因為java不確定該string是否是一個文件目錄,或者還是只是一個數字或者其他類型的對象,只能簡單的將它顯示出來
然后調用listFile()方法的話,返回的是一個文件類型的文件數組,返回的也是dir目錄下一級的所有文件的目錄,但與string類型不同的是,java可以自動識別文件類型的對象,知道返回的是一個File類型的對象,所以可以調用相應的方法進行遞歸遍歷,而String 類型可能是因為系統沒有配備相應的方法,所以不能做判斷是否是目錄,并且進行遞歸遍歷的操作
2016-09-29
首先調用list()方法的話,返回的是一個String類型的字符串數組,它返回的是dir目錄下一級的所有文件的目錄,但它是以字符串的形式存在,然而java并不會識別該字符串類型的目錄,只能簡單的將它顯示出來
然后調用listFile()方法的話,返回的是一個文件類型的文件數組,返回的也是dir目錄下一級的所有文件的目錄,但與string類型不同的是,java可以自動識別文件類型的對象,知道返回的是一個File類型的對象,所以可以調用相應的方法進行遞歸遍歷,而String 類型可能是因為系統沒有配備相應的方法,所以不能做判斷是否是目錄,并且進行遞歸遍歷的操作
2016-07-17
對的,就是針對這個問題,我利用將返回的String數組分別創建File對象,然后就可以遞歸調用了。。但不知道是不是因為兩個方法的區別,導致沒有到達遞歸的效果。
String[] file = dir.list();
// for(String temp : file){
// File tempFile = new File(temp);
// System.out.println(dir + "\\" + tempFile);
// System.out.println(tempFile.isDirectory());
// if(tempFile.isDirectory()){
// listDirectory(tempFile);
// System.out.println(dir + "\\" + tempFile);
// System.out.println(dir + "是個目錄");
// }else{
// //System.out.println(dir + "\\" + temp);
// }
// }
2016-07-17
嘗試做出解答:
首先,list返回的的是String類型的值,僅僅只是當前目錄下的所有文件和目錄的名稱(假設其中有個xx.txt,返回的只是“xx”,前面沒有“e://a//b”這樣),要分清,這是個字符串String
listFiles返回的是File的對象(類似于你這樣創建的:File file = new File(“E:\\a”);),這個是File類型
最后,要用遞歸的話,public static void listDirectory (File dir) throws IOException {...},這個函數的參數是File類型的,所以想要進行遞歸就得正確地傳入參數,如果你傳入了String類型,自然沒有函數里的屬于File類型的方法,所以無法遞歸。