以下三个场景,在我们日常的测试开发中经常遇到:
- 软件自动化测试,在进行参数测试时,我们通常将所有相似功能的参数文件统一放在一个目录中,在自动化程序启动的时候,获取资源参数文件夹中所有参数文件,然后解析实现参数化;
- 自动化测试脚本,每个测试用例类运行时,在 beforeClass(通常选这个) 或 beforeTest 前获取对应目录的参数化文件
- 获取某个目录下所有的文件列表(含子目录文件,例如 TestNG生成的测试报告,或者 target/site 工程信息目录),将其拷贝至对应的web服务器目录,供相关人员查阅
以上前两种情况我们都需要获取对应目录下的参数化文件,第三种情况是前两种的进阶,那么我们如何获取对应目录下的文件列表呢?请看如下源码:
获取目录下的文件列表源码:
1 // 目录文件列表 2 public static LinkedList<String> fileList = new LinkedList<String>(); 3 4 /** 5 * <strong>获取文件夹中文件列表</strong><br> 6 * <br> 7 * <li>当目录非法或目录不存在时,返回null</li> 8 * <br> 9 * @author Aaron.ffp 10 * @version V1.0.0: autotest-base cn.ffp.autotest.base.util FileUtils.java getfList, 2016-03-15 23:51:06.049 Exp $ 11 * 12 * @param dir 目录 13 * @param recursion 是否递归获取子目录文件列表(true,获取) 14 * @return 文件列表 15 */ 16 public static LinkedList<String> getfList(String dir, boolean recursion) { 17 if (!StringUtils.isBlank(dir)) { 18 File fDir = new File(dir); 19 20 if (fDir.isFile() || !fDir.exists()) { 21 return null; 22 } 23 24 File[] fList = fDir.listFiles(); 25 26 for (int i = 0; i < fList.length; i++) { 27 if (fList[i].isFile()) { 28 fileList.add(fList[i].getPath()); 29 } else { 30 if (recursion) { 31 getfList(fList[i].getPath(), recursion); 32 } 33 } 34 } 35 } else { 36 return null; 37 } 38 39 return fileList; 40 } 41 42 /** 43 * <strong>获取文件夹中文件列表</strong><br> 44 * <ul> 45 * <li>当目录非法或目录不存在时,返回null</li> 46 * </ul> 47 * <br> 48 * @author Aaron.ffp 49 * @version V1.0.0: autotest-base cn.ffp.autotest.base.util FileUtils.java getfList, 2016-03-24 23:10:27.594 Exp $ 50 * 51 * @param dir 目录 52 * @return 文件列表 53 */ 54 public static LinkedList<String> getfList(String dir) { 55 LinkedList<String> fl = new LinkedList<String>(); 56 57 if (!StringUtils.isBlank(dir)) { 58 File fDir = new File(dir); 59 60 if (fDir.isFile() || !fDir.exists()) { 61 return null; 62 } 63 64 File[] fList = fDir.listFiles(); 65 66 for (int i = 0; i < fList.length; i++) { 67 if (fList[i].isFile()) { 68 fl.add(fList[i].getPath()); 69 } 70 } 71 } else { 72 return null; 73 } 74 75 return fl; 76 }
获取目录下的文件列表单元测试源码:
@Test(description="public static LinkedList<String> FileUtils.getfList(String dir, boolean recursion) ---> 破坏性:null、空 ", groups="getfList") public void test_getfList_invalid2() { String dir = ConstantInfo.PROJECT_HOME; dir = ""; fileList.clear(); LinkedList<String> fList = getfList(dir, true); Assert.assertTrue(fList == null); } @Test(description="public static LinkedList<String> FileUtils.getfList(String dir, boolean recursion) ---> 破坏性:文件 ", groups="getfList") public void test_getfList_invalid1() { String dir = ConstantInfo.PROJECT_HOME; dir = "D:\DevTool\workspace\maven\autotest-base\.project"; fileList.clear(); LinkedList<String> fList = getfList(dir, true); Assert.assertTrue(fList == null); } @Test(description="public static LinkedList<String> FileUtils.getfList(String dir, boolean recursion) ---> 通过性:合法目录(递归获取子目录文件列表) ", groups="getfList") public void test_getfList_valid2() { String dir = ConstantInfo.PROJECT_HOME; fileList.clear(); LinkedList<String> fList = getfList(dir, true); if (fList == null) { return; } for (int i = 0; i < fList.size(); i++) { logger.info(fList.get(i)); } logger.info("目录中文件总个数为: " + fList.size()); Assert.assertFalse(fList == null); } @Test(description="public static LinkedList<String> FileUtils.getfList(String dir, boolean recursion) ---> 通过性:合法目录 ", groups="getfList") public void test_getfList_valid1() { String dir = ConstantInfo.PROJECT_HOME; fileList.clear(); LinkedList<String> fList = getfList(dir, false); if (fList == null) { return; } for (int i = 0; i < fList.size(); i++) { logger.info(fList.get(i)); } logger.info("目录中文件总个数为: " + fList.size()); Assert.assertFalse(fList == null); }
至此, Java学习-042-获取目录文件列表(当前,级联) 顺利完结,希望此文能够给初学 JavaWeb 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^