Java:从配置文件读取&;基于值高效地执行测试
好的,我确信我不会以最有效的方式来做这件事,我正在寻求一些关于如何更有效地做这件事的帮助Java:从配置文件读取&;基于值高效地执行测试,java,data-structures,mapping,Java,Data Structures,Mapping,好的,我确信我不会以最有效的方式来做这件事,我正在寻求一些关于如何更有效地做这件事的帮助 config.txt文件包含键/值对,其中键=测试名称,值=是否执行测试 解析配置文件并创建要运行的测试列表 运行那些测试 下面是我目前正在做的事情 通过传递给助手函数parseConfig(我的配置文件上的一个BufferedReader)来创建ArrayList。parseConfig返回一个树集,我在ArrayList的构造函数方法中使用它 parseConfig迭代配置文件中的文本行。若该值指
- config.txt文件包含键/值对,其中键=测试名称,值=是否执行测试
- 解析配置文件并创建要运行的测试列表
- 运行那些测试
- 通过传递给助手函数parseConfig(我的配置文件上的一个BufferedReader)来创建ArrayList。parseConfig返回一个树集,我在ArrayList的构造函数方法中使用它
- parseConfig迭代配置文件中的文本行。若该值指示执行测试,则将测试名称添加到树集合。返回树集
- 使用增强的for循环遍历ArrayList。增强for循环的主体基本上是一个很长的if/else语句…if key.equals(“thisTest”),执行thisTest,else if key.equals(thatest),执行thatTest…等等
这是我真正不喜欢的最后一部分。它工作得很好,但似乎笨拙且效率低下。因为我的ArrayList是使用树集构建的,所以它是按排序顺序排列的。我想使用一种更优雅、更确定的方法来将密钥映射到要执行的测试。有人能帮我吗?我想做些别的事情,因为你需要做的就是测试这个列表的条目 我会一行一行地对其应用正则表达式,从我看来,它将非常简单,只有两个组和一个积极的前瞻性,这样我可以只提取所有匹配的行,并从中创建一个ArrayList,然后迭代ArrayList并测试每个方法。如果你能提供一些关于文件外观的信息,我可以帮助你输入代码 更新 例如,下面是我提出的代码(5分钟内可以改进),它将执行解析:
/**
*
* @param inputFile location of inputFile
* @return {@link ImmutableSet} of tests to run
*/
public static ImmutableSet<String> parseConfigFile(File inputFile){
HashSet<String> innerSet = Sets.newHashSet();
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(inputFile));
String newLine = "";
while( (newLine = bufferedReader.readLine()) != null){
Pattern p = Pattern.compile("(.+)=(?=yes|1|true)(.+)");
Matcher m = p.matcher(newLine);
while(m.find()){
//System.out.println(m.group(1));
innerSet.add(m.group(1));
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bufferedReader != null)
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return ImmutableSet.copyOf(innerSet);
}
答案是创建一个
HashMap
对象。我不确定你是否理解我的问题,或者我是否理解你的答案,但我不确定这是否是我要寻找的。我已经发布了后续问题。
SomeTest=true
SomeOtherTest=false
YetAnotherTest=1
LastTest=yes
GogoTest=no
OneMore=0