4
  • 我的属性文件中有一些插入的值。这会像,

键=值

  • 我必须更新属性文件。更新时,正在检查密钥是否可用。如果键在那里,我需要删除键和值并重新写入。
  • 任何人都可以给我代码以在再次更新/写入之前删除现有的键和值。

这是我要插入和更新的java代码:

 if (action.equals("insert")) {
  if (con != null) {
    if (key == null) {
      //session.setAttribute(username, con); 
      out.println("****Connected Successfully****");
      String rootPath=request.getSession().getServletContext().getRealPath("/");
      System.out.println(rootPath);
      String propPath=rootPath+"/WEB-INF/";
      PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter(propPath+"importedDB.properties", true)));
      out1.println(cname+"=jdbc:oracle:thin:@"+host+":"+port+"/"+service+","+username+","+password);
      out1.close();
    } else {         
      out.println("*Connection name "+cname+" already exists. Please try with another name");
    }
  }
}
if (action.equals("update")) {
  if (con != null) {
    if (key == null) {
      out.println(cname+" is not available.");
    } else {
      String rootPath=request.getSession().getServletContext().getRealPath("/");
      System.out.println(rootPath);
      String propPath=rootPath+"/WEB-INF/";
      PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter(propPath+"importedDB.properties", true)));
      out1.println(cname+"=jdbc:oracle:thin:@"+host+":"+port+"/"+service+","+username+","+password);
      out1.close();
      out.println("updated successfully");
    }
  }
}
4

4 回答 4

7

加载它:

Properties properties = new Properties();
properties.load(your_reader);

然后使用 remove() 方法删除一个属性:

properties.remove(your_key);

最后将此更改写入文件属性文件:

properties.store(your_writer, null);

更新

我在您发表评论后发布此更新:

我试过..得到的是,它不会干扰旧内容..只是用删除的值再次重写文件..最初文件有key1 = value1和key2 = value2 ..使用上面的代码,我试图删除key2 ,现在文件有,key1=value1 key2=value2 然后是今天的时间和日期,key1=value1

试试这个例子,我试过了,它工作得很好,如果它不起作用,我认为你的代码中有一些错误:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;

public class Props {

    public Props() {
        try {
            File myFile = new File("props.properties");
            Properties properties = new Properties();
            properties.load(new FileInputStream(myFile));
            properties.remove("deletethis");
            OutputStream out = new FileOutputStream(myFile);
            properties.store(out, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[]args){
        new Props();
    }
}

props.properties之前

#Wed Mar 06 11:15:24 CET 2013
file=File
edit=Edit
deletethis=I'm gonna be deleted!

props.properties之后

#Wed Mar 06 11:15:24 CET 2013
file=File
edit=Edit
于 2013-03-06T06:09:12.833 回答
3

你看过Apache Commons 配置吗?

我会尝试类似的东西:

import org.apache.commons.configuration.PropertiesConfiguration;

PropertiesConfiguration config = new PropertiesConfiguration("myfile.properties");    
config.clearProperty("my.property");
config.save();
于 2014-01-24T17:35:06.540 回答
0

最简单和最明显的解决方案是读取您的输入文件,逐行检查并检查您需要替换的属性。然后做任何你需要的改变并重写整个文件。

您可能还想使用一个临时文件来编写您的新配置,然后用它替换现有的。如果您的应用程序有可能在过程中崩溃,这将为您提供帮助。您仍然可以使用旧配置。

于 2013-03-06T06:06:47.297 回答
0

尝试

    Properties props = new Properties();
    FileInputStream in = new FileInputStream(file);
    props.load(in);
    in.close();
    if (props.remove("key") != null) {
        FileOutputStream out = new FileOutputStream(file);
        props.store(out, "");
        out.close();
    }
于 2013-03-06T06:12:00.027 回答