浏览 5303 次
锁定老帖子 主题:去面试当场要我写一个小程序,没写出来—挂了
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-12
该题为:用java API写一个类,任务是把一个文件夹及所有子文件夹中包含的文件读取出来并且自己写一个排序函数将其全部打印出来。做了将近半个小时,没有做出来,结果老总过来看了下,问我做的怎么样,我就把思路给他讲了一遍,可他要的是运行效果,没有结果就算没有完成,最后还是委婉的和我说了几句,你的基本功还是要加强,欢迎你下次再来我们公司面试。 就这样,没有下文了。。。 我的思路大概是这样的:写一个递归函数,然后进入父文件夹后读出所有文件,并且依次判断是否为文件,然后进行下一步操作或者保存到List中去,用一个递归函数来判断是否有子文件夹存在,我也不知道我的思路是否正确,等我有时间的时候再来做一下这个题目,我觉得还是很有必要掌握这些基础知识的,如果大家觉得有什么好一点的思路或者方法都可以贴出来,互相学习一下。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-09-12
/* * @(#) FileTest.java 2008/09/12 */ import java.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; /** * FileTest * * @version 1.0 * @since 2008/09/12 */ public class FileTest { public static void main(String[] args) { File directory = new File("c:\\temp\\"); List fileList = listAllFiles(directory); Set fileNameSet = new HashSet(fileList.size()); for (int i = 0 ; i< fileList.size() ; i++) { File file = (File)fileList.get(i); fileNameSet.add(file.getAbsolutePath()); } for (Iterator i = new TreeSet(fileNameSet).iterator() ; i.hasNext() ; ) { System.out.println(i.next()); } } private static List listAllFiles(File directory) { if (directory == null || !directory.isDirectory() ){ return null; } List fileList = new ArrayList(); addSubFileList(directory, fileList); return fileList; } private static void addSubFileList( File file, List fileList ){ File[] subFileArray = file.listFiles(); if (subFileArray == null || subFileArray.length == 0 ){ return; } for (int i = 0 ; i < subFileArray.length ; i++) { File subFile = subFileArray[i]; if (subFile == null ){ continue; } if (subFile.isFile() ){ fileList.add(subFile); continue; } else if (subFile.isDirectory() ){ addSubFileList(subFile, fileList); } } } } 引用 c:\temp\ASTOption\ASTOption.exe c:\temp\ASTOption\ASTOption.inf c:\temp\ASTOption\ITMFP014_Win2K.dev c:\temp\ASTOption\cnpdsdk.dll c:\temp\ASTOption\cnsdk16.dll c:\temp\ASTOption\cnsdk32.dll c:\temp\acegi-security-1.0.1.jar c:\temp\acegi-security-rsi-1.0.1.jar c:\temp\cls c:\temp\commons-attributes-api-2.1.jar c:\temp\commons-beanutils.jar c:\temp\commons-codec-1.3.jar c:\temp\commons-collections-3.1.jar c:\temp\commons-dbcp-1.2.1.jar c:\temp\commons-lang-2.1.jar c:\temp\commons-logging-api.jar c:\temp\commons-logging.jar c:\temp\commons-pool-1.3.jar c:\temp\ehcache-1.1.jar c:\temp\ibatis-common-2.jar c:\temp\ibatis-sqlmap-2.jar c:\temp\j2ee.jar c:\temp\jakarta-oro-2.0.8.jar c:\temp\java c:\temp\jsf-api.jar c:\temp\jsf-ibm.jar c:\temp\jsf-rsi-2.2.7.jar c:\temp\log4j-1.2.13.jar c:\temp\log4j-1.2.4.jar c:\temp\mpibtbatch.jar c:\temp\ojdbc14.jar c:\temp\oro-2.0.8.jar c:\temp\rsi.jar c:\temp\spring.jar c:\temp\sqljdbc.jar c:\temp\vssver.scc |
|
返回顶楼 | |
发表时间:2008-09-12
package com.zhangpeng.file;
import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class Directory { private List file = new ArrayList(); private File f ; public Directory(){ } public List getAllFile(String dir_name){ File[] files = null; try { f = new File(dir_name); files = f.listFiles(); for(int i=0;i<files.length;i++){ if(files[i].isFile()){ file.add(files[i].getName()); }else{ getAllFile(files[i].getAbsolutePath()); } } } catch (Exception e) { System.out.println("目录路径不正确。"); } Collections.sort(file,new Com()); return file; } public static void main(String[] args){ List l = new Directory().getAllFile("D:\\test"); Iterator it = l.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } } //比较器 class Com implements Comparator{ public int compare(Object o1, Object o2) { String s = (String)o1; String s1 = (String)o2; // TODO Auto-generated method stub return s.compareTo(s1); } //123.txt //12321.txt //asdsf.txt //cscdf.txt //123.txt //3435.txt } |
|
返回顶楼 | |
发表时间:2008-09-12
import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class FilePrinfTool { /** * @param args */ static List<String> fileListGlobal = new ArrayList<String>(); public static void main(String[] args) { getAllFileList("C:\\Downloads\\"); Collections.sort(fileListGlobal); for (String name : fileListGlobal) { System.out.println(name); } } public static void getAllFileList(String root){ File rootDir = new File(root); if (rootDir == null || !rootDir.isDirectory()){ System.out.println(String.format("\"%s\" 这个目录不存在 !", root)); } else { getSubDirectotyFile(rootDir); } } private static void getSubDirectotyFile(File rootDir) { File[] fileArray = rootDir.listFiles(); for (File file : fileArray) { if (file.isDirectory()) { getSubDirectotyFile(file);//递归 } else { String filePath = file.getPath(); fileListGlobal.add(filePath); } } } } C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\record\formula\package-summary.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\record\package-frame.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\record\package-summary.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestBug42464-out.txt C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestBug42464.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestBug43093.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestBug44297.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestBugs-out.txt C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestBugs.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestCellStyle.html C:\Downloads\poi-bin-3.0.2-FINAL-20080204\poi-3.0.2-FINAL\docs\junit\org\apache\poi\hssf\usermodel\TestCloneSheet.html..... |
|
返回顶楼 | |
发表时间:2008-09-12
没有看完全部回复,但是看了几个都是把所有文件文名放到一个大的列表之后再排序的。但是,如果指定的目录是C:\之类的呢?Out of Memory。
注意到两个同级目录A,B,如果A在B排序前面,A的所有子目录也肯定在B的前面。所以全部读取是不必要的。 |
|
返回顶楼 | |
发表时间:2008-09-12
ls说的有道理
这要看程序的目的是什么 一般来讲,程序的目的不会仅仅是读出文件名 把所有子目录下的文件放到一个列表是共通的需求 所以才会用一个List<File>的结构 至于Out of Memory 可以先做一个检查 |
|
返回顶楼 | |
发表时间:2008-09-13
我觉得Vistor模式是最可能的方案
|
|
返回顶楼 | |
发表时间:2008-09-15
这两天一直有事情忙着,竟然忘了来这里看看了,感谢楼上兄弟们的回答,用的是一组递归调用的方法,但是不需要把所有的文件绝对路径读出来,只需要将文件名放进List中,然后进行排序,不过我想有前几位的回答就可以总结出最终的答案来了,正确答案将会在不久后贴出来,这两天没有时间总结,有人愿意也可以帮我结一下。
|
|
返回顶楼 | |
发表时间:2008-09-17
递归,然后按照文件名的长短以及首字母排序
|
|
返回顶楼 | |