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をコメントアウトした場合、これは問題なく機能します。

Q:より良いデザインはありますか?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のサポートが組み込まれており、その情報を格納するためにプロパティオブジェクトを使用します。

アプリケーションの起動時または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 に答える