0

我必须从 UI 读取和写入 userdata.properties,到目前为止,每件事都像读取和写入一样工作,在我提到像这样的文件中的硬编码直接路径之前

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

但我的问题是,如果我这样提到我无法更改路径,因为我必须在另一个 path.properties 文件中提到 D:\user\userdata.properties,现在我必须读取 path.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

将您的属性文件放在类路径上并通过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)来做到这一点。但是您也可以手动执行此操作,但是,您应该每个课程只执行一次,而不是每个请求执行一次。


好的,这是一个如何使用 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 回答
0

首先,您不应该load为每个请求调用该方法。这对你来说会非常昂贵。

其次,由于您已经在使用 spring,因此无需以这种方式读取属性文件。你可以注入它。

我建议为您的班级proxyHostproxyPort在您的班级中创建字段作为字段。

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 回答