用于存储常量的资源文件类型

时间:2014-04-10 09:22:53

标签: java xml properties-file resource-files

我正在开发一个测试Web服务的应用程序,我使用JUnit parameterized tests。我想从资源文件中读取参数。 我想知道哪个是存储这些参数的最佳方式。

  1. 在.properties文件中?

    test1.inputPath= C:\\Path
    test1.expectedOutputPath= C:\\Path
    test2.inputPath= C:\\Path2
    test2.expectedOutputPath= C:\\Path2
    
  2. 在xml文件中?

    <test>
      <inputPath>  C:\Path <\inputPath>
      <expectedOutputPath>  C:\Path <\expectedOutputPath>
    <\test>
    <test>
      <inputPath>  C:\Path2 <\inputPath>
      <expectedOutputPath>  C:\Path2 <\expectedOutputPath>
    <\test>
    
  3. 其他方法吗?

  4. 感谢。

3 个答案:

答案 0 :(得分:0)

不要试图让你的生活更复杂;)你可以用这种方式轻松阅读属性文件:

Properties prop = new Properties();
InputStream input = new FileInputStream(fileName);
prop.load(input);
String s = prop.getProperty("test1.inputPath");

并导入:

import java.util.Properties;

对你来说还很复杂吗?

答案 1 :(得分:0)

我为我的问题找到的最佳解决方案是使用Apache Commons Configuration的PropertiesConfiguration。使用起来非常简单:

在我的.properties文件中:

test1= Path1,Path2
test2= Path3,Path4

然后我自动读取.properties文件,并为每个测试检索路径作为String数组。

@Parameters
public static Collection<Object[]> readPropertiesFile(){
    ArrayList<Object[]> result= new ArrayList<Object[]>();
    try {
        Configuration config = new PropertiesConfiguration("testPaths.properties");
        Iterator<String> keys=config.getKeys();
        while(keys.hasNext()){
            String[] paths= config.getStringArray(keys.next());
            result.add(paths);          
        }
    } catch (ConfigurationException e) {
        e.printStackTrace();
    }
    return result;
}

答案 2 :(得分:0)

答案当然是有很多方法可以做到。

首先问问自己:这些属性会改变吗?它们是参数还是常量? 例如,州的数量,他们将改变的机会是多少?在这种情况下,您需要一个常量,而不是参数。

现在,如果您正在寻找可在运行时更改的内容,那么您应该查看属性和资源包。


如果您只需要常量,那么您可以执行以下操作:

public interface Constants
{
    public char NUMBER_ONE = '1';
    public long A_LONG_TIME_AGO = 1321322;
    public String CANT_BREAK_WITH_IRON_PICKAXE= "OBSIDIAN";
}

使用接口有许多优点:它们不需要实例化,不会使用IO访问减慢系统速度,并且所有属性都是静态最终的。


但是,如果需要在运行时加载值,请使用属性文件。虽然这里的所有答案都很好,但我认为唯一一个很好的是Spring的@Configuration和@ImportResource,它们被注入,允许很好的模拟,并且很好地与Spring框架的其余部分集成,并且可以很容易地用-D覆盖从命令行。

如何使用xml和属性文件的混合加载属性文件的示例:Spring-Boot: How do I reference application.properties in an @ImportResource