0

UIからuserdata.propertiesを読み書きする必要がある場合、これまでのすべてが読み書きのように機能していますが、このようなファイル内のハードコードされた直接パスについて言及する前に

File f = new File("D:\\user\\userdata.properties")

しかし、私の問題は、このように言及した場合、パスを変更できないことです。そのため、別の path.properties ファイルで D:\user\userdata.properties に言及する必要があります。

File f = new File(........)

それを行う方法を教えてください。これは、現在userdata.propertiesを読み取るために使用している方法です

@RequestMapping("/proxy")
    public String ProxySettings(Model model) throws Exception {



        File f = new File("D:\\sahi\\userdata.properties");
        //String path = MobeeProxyChangeController.class.getResourceAsStream("/property/path.properties").toString();


        Properties properties = new Properties();

        try {
            properties.load(new FileInputStream(f));

            String getHost = properties.getProperty("ext.http.proxy.host");
            String getPort = properties.getProperty("ext.http.proxy.port");

            model.addAttribute("proxyHost", getHost.trim());
            model.addAttribute("proxyPort", getPort.trim());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "proxyFile";

    }

前もって感謝します

金星

4

2 に答える 2

0

まず、loadリクエストごとにメソッドを呼び出さないでください。それはあなたにとって非常に高価になるでしょう。

次に、すでにSpringを使用しているため、この方法でプロパティファイルを読み取る必要はありません。あなたはそれを注入することができます。

クラスのフィールドをフィールドとして作成することをおproxyHost勧めします。proxyPort

public class MyController {
    ...
    private String proxyHost;
    private String proxyPort;

    @RequestMapping("/proxy")
    public String ProxySettings(Model model) throws Exception {
        model.addAttribute("proxyHost", this.proxyHost);
        model.addAttribute("proxyPort", this.proxyPort);

        return "proxyFile";
    }

    // provide setters for the above fields or use @Autowired
}

スプリング構成は次のようになります。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:userdate.properties" />
</bean>

<bean class="com.foo.MyController">
    <property name="proxyHost" value="${ext.http.proxy.host}"/>
    <property name="proxyPort" value="${ext.http.proxy.port}"/>
</bean>

userdata.properties保持する場所に応じて、クラスパスまたはファイルシステムのいずれかから読み取ることができます。

于 2012-06-15T10:02:47.707 に答える
0

プロパティ ファイルをクラスパスに配置し、MessageSource

例:

プロパティファイル「foo.properties」:

foo=bar
baz=phleem

Java コード:

public static void main(final String[] args) {
    final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("foo");
    System.out.println(messageSource.getMessage("foo", new Object[0], Locale.getDefault()));
}

出力:

バー

Spring にそれを注入させることはできMessageSourceますが、XML を介して (または を介し​​て) 行う必要があると思います@Configuration。ただし、手動で行うこともできますが、リクエストごとではなく、クラスごとに 1 回だけ行う必要があります。


OK、Spring を使用して接続する方法の例を次に示します。

XML 構成:

<bean id="proxySettings" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="userdata" />
</bean>

コントローラ クラス:

@Controller
public class ProxyController {

    private static final Locale LOCALE = Locale.getDefault();
    private static final Object[] EMPTY_ARGS = new Object[0];

    @Autowired @Qualifier("proxySettings")
    private MessageSource messageSource;

    @RequestMapping("/proxy")
    public String proxySettings(final Model model) throws Exception {
        model.addAttribute("proxyHost", messageSource.getMessage("ext.http.proxy.host", EMPTY_ARGS, LOCALE));
        model.addAttribute("proxyPort", messageSource.getMessage("ext.http.proxy.port", EMPTY_ARGS, LOCALE));
        return "proxyFile";
    }

}
于 2012-06-15T10:11:25.060 に答える