我需要更新一个包含键值形式的值的文件(只有一个特定的行)。
app.num_hosts=4
app.resourceid=broker0
我计划读取map中的所有文件,然后修改特定字段并重写文件。这是更新文件的好方法吗?我可以使用哪个API将映射写入文件?
通过搜索现有的问题,我找不到一种方法可以在不重写整个文件的情况下更新单行。
听起来您实际上想使用java.util.properties库。
public static void main(String[] args) {
Properties prop = new Properties();
OutputStream output = null;
try {
//load the file into properties object
FileInputStream input = new FileInputStream("config.properties");
prop.load(input);
input.close();
// set the properties value
output = new FileOutputStream("config.properties");
prop.setProperty("app.num_hosts", "4");
prop.setProperty("app.resourceid", "broker0");
prop.store(output, null);
} catch (IOException io) {
io.printStackTrace();
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这篇博文进一步概述了它,但是你要做的是首先读取属性文件,进行更新,然后把它写回来。
一个Java属性选项
否则,您可以使用IO Api并手动更新它,如下所示:
1)创建一个映射,其中包含要在文件中更新的键和值。
HashMap<String, String> replaceValesMap = new HashMap<String, String>();
2)从path读取文件,因为它给了你真正的路径,即war/fileName.layout
String filepath = getServletContext().getRealPath("fileName.layout");
3)创建一个方法,读取文件并替换值,返回修改后的字符串。
public static String getreportPdfString(HashMap<String, String> replaceValesMap,String fileppath){
String generatedString = "";
File file = new File(fileppath);
StringBuffer strContent = new StringBuffer("");
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
int ch;
while ((ch = fin.read()) != -1)
strContent.append((char) ch);
fin.close();
} catch (Exception e) {
System.out.println(e);
}
String fileString= strContent.toString();
for (Map.Entry<String, String> entry : replaceValesMap.entrySet()) {
fileString = StringUtils.replace(fileString, entry.getKey(),entry.getValue());
}
return fileString;
}
4)最后写入文件:
try (PrintStream out = new PrintStream(new FileOutputStream("fileName.layout"))) {
out.print(text);
}