我已经阅读了很多关于避免使用java硬编码的文章。但无法清楚地了解如何将其应用于我的要求。经过一些研究后我就提出了这个问题。以下是我的代码段。我希望避免在Process pr = rt.exec()
中修改路径名的硬编码。有关如何操作的建议吗?
public class StartUp {
String executable = getStringValue("executable.run");
String filein = getStringValue("incoming.file");
String params1 = getStringValue("executable.params1");
String params2 = getStringValue("executable.params2");
String log = getStringValue("log.file");
String ss = "Started";
public String startCommand() throws IOException, InterruptedException{
Runtime rt = Runtime.getRuntime();
//Process pr = rt.exec("C:\\server\\rd.exe -a C:\\file.lic -z[+] // C:\\File\\log.txt");
Process pr = rt.exec(executable+" "+params1+" "+filein+" "+params2+" "+log);
BufferedReader input = new BufferedReader(new InputStreamReader
(pr.getInputStream()));
String line=null;
StringBuffer start= new StringBuffer();
while((line=input.readLine()) != null) {
start.append("ServerStarted" + line + "\n");
System.out.println(line);
}
int exitVal = pr.waitFor();
System.out.println("Exited with error code "+exitVal);
return line;
//return start.toString();
}
private static String getStringValue(String string) {
return string;
}
}
答案 0 :(得分:4)
你有几件事要尝试:
java PROPERTIES
private Properties _properties;
private void init(){
_properties = new Properties();
InputStream configurationFileIS = PropertiesConfigurationHandler.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);
_properties.load(configurationFileIS);
}
public String getStringValue(String path) {
return _properties.getProperty(path);
}
,属性文件类似于
an.element.to.be.configured.like.a.path=/dev/null
但您也可以使用SPRING CONTEXT
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>WEB-INF/classes/config/properties/database.properties</value>
<value>classpath:config/properties/database.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>
</bean>
并且将以这种方式访问database.properties中的元素
"${jdbc.username}"
-
针对您的具体问题。
您可以创建文件constants.properties
executable.run=C:\\server\\rd.exe
incoming.file=C:\\file.lic
executable.params=-z
log.file=C:\\File\\log.txt
然后在init之后调用getStringValue:
String executable = getStringValue("executable.run");
String filein = getStringValue("incoming.file");
String params = getStringValue("executable.params");
String log = getStringValue("log.file");
然后您可以执行rt.exec
而不是使用硬编码字符串,您可以使用之前检索的字符串。
答案 1 :(得分:3)
-Dpath=...
和System.getProperty("path");
换句话说,有很多不同的方式,最好取决于你的实际需要。
答案 2 :(得分:0)
您也可以将字符串分配给名为private final static String
的井。这样,代码变得更具可读性(如果您需要稍后更改,则更容易更新。
private final static String rtCommand = ""C:\\server\\rd.exe -a C:\\file.lic -z[+] C:\\File\\log.txt";//or something more smartly named. You would know what to name it.
....
Process pr = rt.exec(rtCommand);