0

我想知道是否有更好的方法在属性文件中指向 PATH 。考虑以下代码:

public class Properties
{ 
     //MIKE
     public final static String PATH_TO_FILE_A = "C:\\programmer_MIKE\fileA.txt";
     public final static String PATH_TO_FILE_B = "C:\\programmer_MIKE\fileB.txt";

     //BILL
     //public final static String PATH_TO_FILE_A = "/Users/BILL/Desktop/fileA.txt";
     //public final static String PATH_TO_FILE_B = "/Users/BILL/Desktop/fileB.txt";
}

当任何开发人员需要调用 FILE_A 时,他只需执行以下操作:

File file = new File(Properties.PATH_TO_FILE_A);

如果 BILL 将 MIKE 的 PATH_TO_FILE_A 注释掉,这对他来说没问题。

问:有更好的设计吗?如果 BILL 提交了包括属性文件在内的工作 - 他会给 MIKE 带来问题(不用担心,他稍后会得到一杯拿铁咖啡)。

  • 文件很大(2-4Gb),我们不想把它们放在我们的存储库(svn)中,有时只有临时文件夹来创建 PDF,所以我们不想把它们放在“./docs “ 小路。

感谢您的任何指示!

4

3 回答 3

2

如果出于某种原因你真的必须有硬编码的路径,那么你可以将它们存储在某种由用户名索引的地图中。就像是:

public class Properties {

    private static Map<String, DeveloperPaths> properties = create();

    private static Map<String, DeveloperPaths> create() {

        Map<String, DeveloperPaths> properties = new HashMap<String, DeveloperPaths>();

        properties.put("mike", new DeveloperPaths(
                "C:\\programmer_MIKE\fileA.txt", 
                "C:\\programmer_MIKE\fileB.txt")
                );

        properties.put("bill", new DeveloperPaths(
                "/Users/BILL/Desktop/fileA.txt", 
                "/Users/BILL/Desktop/fileB.txt")
                );

        return properties;
    }

    public static File FileA()
    {
        String user = System.getProperty("user.name");
        return properties.get(user).fileA;
    }

    public static File FileB()
    {
        String user = System.getProperty("user.name");
        return properties.get(user).fileB;
    }

}

 class DeveloperPaths {
    public File fileA;
    public File fileB;

    public DeveloperPaths(String pathA, String pathB) {
        fileA = new File(pathA);
        fileB = new File(pathB);
    }
}

然后,无论开发人员如何,访问每个路径的代码都是相同的,例如:

File myFile = Properties.fileA();
于 2012-12-15T15:35:15.100 回答
1

通常路径是可配置的实体,应该存储在属性文件中。

属性文件在 java 中有内置支持,它使用 Properties 对象来存储该信息。

您可以在应用程序的启动或 init(或类似)方法中读取属性文件,并从属性文件中读取属性。这将使您的配置动态化,任何人都可以更改它。

您可以创建一个静态方法并在启动时调用它,例如:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


public class GetProperties {
    public static Properties prop = new Properties();

    public static void init() {

        InputStream inputStream = GetProperties.class.getClassLoader().getResourceAsStream("application.properties");
        try {
            prop.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }       
    }
}
于 2013-06-17T13:34:12.600 回答
0

这样的事情应该在外部配置和/或通过参数、系统参数或环境变量传入。或者,您可以使用 DI/IoC,但是当没有附加行为时,IMO 配置值就足够了。

有一个硬编码的默认值很好,但是这样的东西不属于代码。

于 2012-12-15T15:02:46.593 回答