我必须从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";
}
提前致谢
VENU
答案 0 :(得分: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
,具体取决于您保留的位置。
答案 1 :(得分: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";
}
}