ÔÚÒ»Ñùƽ³£µÄJava¿ª·¢ÖУ¬ÎļþºÍĿ¼µÄ²Ù×÷ÏÕЩÊDz»¿É×èÖ¹µÄʹÃü¡£ÎÞÂÛÊǶÁÈ¡ÉèÖÃÎļþ¡¢É¨ÃèÎļþ¼Ð£¬ÕÕ¾ÉʵÏÖÎļþÖÎÀíϵͳ£¬ÁбíÏÔʾĿ¼ÄÚÈݶ¼ÊÇ»ù´¡¶øÓÖ½¹µãµÄÊÖÒÕ¡£¿ÉÊÇ£¬JavaÖÐÔõÑùÓÅÑÅ¡¢¸ßЧµØÁгöij¸öĿ¼ÏÂËùÓÐÎļþºÍ×ÓĿ¼£¿Õâ¸öÎÊÌâ¿´ËÆ¼òÆÓ£¬È´²ØÓÐһЩϸ½ÚºÍ¼¼ÇÉ¡£
Java±ê×¼¿âÌṩµÄ¹¤¾ßÀàÖ÷Òª¼¯ÖÐÔÚjava.ioºÍjava.nio.file°üÏ¡£¹ØÓÚ³õѧÕߣ¬ÏàʶÁ½ÕßµÄÇø±ðÊÇÒªº¦¡£
java.io.FileÀ࣬ÊÇÔçÆÚJava°æ±¾ÖÐ×î³£ÓõÄÎļþºÍĿ¼²Ù×÷Àà¡£ËüÌṩÁËlist()ºÍlistFiles()Á½¸öÒªÁ죬ÓÃÀ´ÁгöĿ¼ÖеÄÄÚÈÝ¡£list()·µ»ØÎļþÃûµÄ×Ö·û´®Êý×飬¶ølistFiles()·µ»ØFile¹¤¾ßÊý×é¡£ÕâÁ½ÕßµÄÑ¡ÔñÈ¡¾öÓÚÄãºóÐøÒª×öµÄ²Ù×÷¡£
Filedirectory=newFile("ÄãµÄĿ¼·¾¶");if(directory.isDirectory()){String[]fileNames=directory.list();if(fileNames!=null){for(Stringname:fileNames){System.out.println(name);}}}
Õâ¸ö¼òÆÓµÄÀý×Ó¿ÉÒÔÁгöĿ¼ÏÂËùÓÐÎļþºÍ×ÓĿ¼µÄÃû×Ö¡£
²»¹ý£¬java.io.FileÀàµÄÈõµãÔÚÓÚËüµÄ²Ù×÷½ÏΪµ×²ã£¬Ã»ÓкÜÊǸ»ºñµÄ¹ýÂ˺ÍËÑË÷¹¦Ð§¡£Java7ÒýÈëµÄjava.nio.file°üÌáÉýÁËÎļþ²Ù×÷µÄÄÜÁ¦£¬ÆäÖÐ×îÖ÷ÒªµÄÀàÊÇPathºÍFiles¡£
ʹÓÃjava.nio.fileµÄÒªÁì¿ÉÒÔÓÃDirectoryStreamʵÏÖĿ¼µÄ±éÀú£¬ÓÅÊÆÔÚÓÚ¿ÉÒÔÀû±ãµØ¾ÙÐйýÂ˺͵ݹé²Ù×÷¡£
ʾÀý£ºÊ¹ÓÃDirectoryStreamÁгöĿ¼ÄÚÈÝ
PathdirPath=Paths.get("ÄãµÄĿ¼·¾¶");try(DirectoryStreamstream=Files.newDirectoryStream(dirPath)){for(Pathentry:stream){System.out.println(entry.getFileName());}}catch(IOExceptione){e.printStackTrace();}
Õâ¶Î´úÂë±ÈFileÀà¸üǿʢ£¬Ö§³Ö¹ýÂËÆ÷£¬¿ÉÒÔÖ»ÁгöÌØ¶¨ÀàÐ͵ÄÎļþ¡£
Java8ÒýÈëÁËStreamAPI£¬Ò²¼«´óÔöÇ¿ÁËÎļþ´¦Öóͷ£µÄ±ã½ÝÐÔ¡£Äã¿ÉÒÔÓÃFiles.list()ÒªÁì¿ìËÙ»ñÈ¡Á÷¹¤¾ß£¬È»ºóÁ¬ÏµLambda±í´ïʽ£¬ÊµÏÖ¸üÖØ´óµÄĿ¼¹ýÂ˺ʹ¦Öóͷ£¡£
try(Streampaths=Files.list(Paths.get("ÄãµÄĿ¼·¾¶"))){paths.forEach(path->System.out.println(path.getFileName()));}catch(IOExceptione){e.printStackTrace();}
µ«ÈôÊÇÄãÐèÒªµÝ¹éµØÁгö×ÓĿ¼ÄÚµÄËùÓÐÄÚÈÝ£¬¿ÉÄÜÐèҪдµÝ¹éÒªÁì»òʹÓÃFiles.walk()¡£
try(Streamwalk=Files.walk(Paths.get("ÄãµÄĿ¼·¾¶"))){walk.filter(Files::isRegularFile).forEach(path->System.out.println(path));}catch(IOExceptione){e.printStackTrace();}
×Ü½á£ºÕÆÎÕÕ⼸ÕУ¬Äã¾Í¿ÉÒÔÓÃJavaÇáËÉʵÏÖĿ¼ÄÚÈݵÄö¾Ù¡£Æä½¹µãÔÚÓÚÑ¡ÔñºÏÊʵÄÀàºÍÒªÁ죬Á¬ÏµJava8µÄÐÂÌØÕ÷£¬Ê¹´úÂë¸ü¾«Á·¡¢¹¦Ð§¸üǿʢ¡£
ÕÆÎÕÁË»ù±¾µÄĿ¼Áгö¼¼Çɺó£¬Ðí¶à¿ª·¢Õß×îÏȹØ×¢ÔõÑùÁ¬ÏµÏÖʵÐèÇóʵÏÖ¸üÖØ´óµÄĿ¼ÖÎÀí¡£ÀýÈç£¬É¸Ñ¡ÌØ¶¨ÀàÐÍÎļþ¡¢µÝ¹éÉî¶È¿ØÖÆ¡¢ÊäÌØÊâʽÓÅ»¯ºÍÒì²½´¦Öóͷ££¬¶¼Êdz£¼ûµÄÏÖʵÎÊÌâ¡£
ÏëÖ»ÁгöÌØ¶¨À©Õ¹ÃûµÄÎļþ£¬ºÃ±È.txt»ò.jpg£¬¿ÉÒÔʹÓùýÂËÆ÷²ÎÊý»òÕßÁ¬ÏµJavaµÄPredicate²Ù×÷¡£
ʹÓÃDirectoryStream.Filter¿ÉÒÔʵÏÖÓÐÓùýÂË£º
try(DirectoryStreamstream=Files.newDirectoryStream(dirPath,"*.txt")){for(Pathentry:stream){System.out.println(entry.getFileName());}}catch(IOExceptione){e.printStackTrace();}
ÈôÊÇÐèÒªÖØ´ó¹ýÂË£¬ºÃ±ÈÖ»ÏÔʾÐÞ¸Äʱ¼äÔçÓÚij¸öÈÕÆÚµÄÎļþ£¬½¨ÒéÁ¬ÏµFiles¶ÁÈ¡ÎļþÊôÐÔ¡£
Files.newDirectoryStream(dirPath,entry->{try{returnFiles.isRegularFile(entry)&&Files.getLastModifiedTime(entry).toMillis()
ÈôÊÇĿ¼²ã¼¶ºÜÉµÝ¹é±éÀú¿ÉÄܻᵼÖÂÐÔÄÜÎÊÌâ¡£´Ëʱ£¬¿ÉÒÔ˼Á¿Ê¹Ó÷ǵݹéµÄÐÐÁлòÕ»½á¹¹£¬ÊÖ¶¯¿ØÖƱéÀúÉî¶È¡£
publicvoidlistFilesWithDepth(Pathstart,intmaxDepth){Queuequeue=newLinkedList<>();queue.add(newPathDepthPair(start,0));while(!queue.isEmpty()){PathDepthPaircurrent=queue.poll();intcurrentDepth=current.depth;if(currentDepth>maxDepth)continue;try(DirectoryStreamstream=Files.newDirectoryStream(current.path)){for(Pathentry:stream){System.out.println(entry);if(Files.isDirectory(entry)){queue.add(newPathDepthPair(entry,currentDepth+1));}}}catch(IOExceptione){e.printStackTrace();}}}classPathDepthPair{Pathpath;intdepth;PathDepthPair(Pathpath,intdepth){this.path=path;this.depth=depth;}}
ÈôÊÇÄã²»Öª×ãÓÚÖ»ÔÚ¿ØÖÆÌ¨ÏÔʾ£¬»¹Ï£ÍûÓÐÆ¯ÁÁµÄ½çÃæ£¬»òµ¼³öΪJSON¡¢XMLÃûÌ㬿ÉÒÔʹÓõÚÈý·½¿â£¨ÈçJackson¡¢Gson£©¶ÔĿ¼½á¹¹¾ÙÐÐÐòÁл¯¡£
//µÝ¹é¹¹½¨Ä¿Â¼Ê÷publicclassFileNode{Stringname;booleanisDirectory;Listchildren=newArrayList<>();}//ÌìÉúÒªÁìpublicFileNodebuildTree(Pathpath){FileNodenode=newFileNode();node.name=path.getFileName().toString();node.isDirectory=Files.isDirectory(path);if(node.isDirectory){try(DirectoryStreamstream=Files.newDirectoryStream(path)){for(Pathchild:stream){node.children.add(buildTree(child));}}catch(IOExceptione){e.printStackTrace();}}returnnode;}//תΪJSONObjectMappermapper=newObjectMapper();StringjsonStr=mapper.writeValueAsString(buildTree(Paths.get("ÄãµÄĿ¼·¾¶")));System.out.println(jsonStr);
ÅäºÏǰ¶Ë»òÎļþÉúÑĹ¦Ð§£¬¿ÉÒÔÈÃÄãµÄĿ¼ä¯ÀÀ¹¤¾ß±äµÃ¸üΪרҵ¡£
Ëæ×ÅĿ¼µÄÊý¾ÝÁ¿ÔöÌí£¬ÎªÁËÌáÉýЧÂÊ£¬¿ÉÒÔ˼Á¿Òì²½»ò¶àÏß³ÌɨÃè¡£ÀýÈ磬ʹÓÃExecutorService¿ªÆô¶àÏß³ÌʹÃü£¬¼ÓËÙ±éÀúËÙÂÊ¡£
ʾÀý£º¶àÏ̵߳ݹéÁгöĿ¼£¨ÐèÒª×¢ÖØÏß³ÌÇå¾²ºÍ×ÊÔ´ÖÎÀí£©
ExecutorServiceexecutor=Executors.newFixedThreadPool(4);publicvoidlistDirectoryAsync(Pathpath){executor.submit(()->{try(DirectoryStreamstream=Files.newDirectoryStream(path)){for(Pathentry:stream){System.out.println(entry);if(Files.isDirectory(entry)){listDirectoryAsync(entry);}}}catch(IOExceptione){e.printStackTrace();}});}
È·±£ÔÚŲÓÃÍê±ÏºóŲÓÃexecutor.shutdown()ÒԹرÕÏ̳߳ء£
×ßµÃÔÙÔ¶£¬¹é¸ù½áµ×£¬JavaµÄÎļþĿ¼²Ù×÷ÄÜÁ¦Ç¿Ê¢¶ø¸»ºñ¡£Ö»ÒªÄãÕÆÎÕÁ˺ÏÊʵŤ¾ßºÍ¼¼ÇÉ£¬¾ÍÄÜÔÚÏîÄ¿ÖÐÇáËÉÓ¦¶ÔÖÖÖÖ³¡¾°¡ª¡ª´Ó¼òÆÓµÄÎļþÁÐ±íµ½ÖØ´óµÄĿ¼½á¹¹ÖÎÀí£¬¼«¿Í½Ì³ÌÒ»Ö±¶¼ÔÚÒýÁìÄãÏòǰ¡£
ÈôÊÇÄãÈȰ®ÊÖÒÕ£¬Ï²»¶ÉîÈëÍÚ¾òJavaµÄÐþÃ¼á³ÖѧϰµÄÈÈÇ飬ÈÃÿһ´ÎĿ¼±éÀú¶¼³ÉΪÄãÊÖÒÕÉú³¤µÄõè¾¶¡£Õâ²»µ«ÊÇÊÖÒյĻýÀÛ£¬¸üÊÇÍ·ÄÔµÄÄ¥Á¶¡£Î´À´µÄÄ㣬һ¶¨»áлл½ñÌìһֱ̽Ë÷µÄ×Ô¼º¡£