【问题标题】:Getting values from properties file从属性文件中获取值
【发布时间】:2013-02-08 00:56:32
【问题描述】:
  • 我有一个 java 代码可以将值附加到我的属性文件中
  • 我的属性文件会有这样的条目。
  • key1 = 主机、端口、orcl、用户名、密码
  • key2 = 主机、端口、orcl、用户名、密码
  • key3 = 主机、端口、orcl、用户名、密码等...

这些 key1、key2 和 key3 是连接名称。

  • 在进入属性文件之前,首先我必须检查文件是否已经给出了连接名称条目。我的意思是,如果用户再次使用 key1 或 key2 或 key3 连接名称输入值,它必须发出警报,说明此连接名称可用,因此请尝试使用其他名称。

这是我的 java 代码,用于输入文件:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
       try
       {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
            con = DriverManager.getConnection("jdbc:oracle:thin:@"+host+":"+port+"/"+service,username,password);
            con.setAutoCommit(false);
            if (con!=null)
            {
                 session.setAttribute(username, con); 
                 out.println("Connected Successfully");          
                 PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("my properties file", true)));
                 out1.println(cname+" = "+host+","+port+","+service+","+username+","+password);
                 out1.close();
            }
            else
            {
                 out.println("Error in getting connection");
            }
       }
       catch(Exception e)
       {
            e.printStackTrace();
       }
}

【问题讨论】:

  • 快速提问,为什么要在会话中建立数据库连接?看不出这是个好主意。
  • 用于其他用途。该行与我现在提出的问题无关。我可以知道为什么我对这个问题投了反对票吗?
  • 投了反对票,因为这个问题不清楚并且研究工作很少。
  • 在哪一行不清楚,你想在哪里做研究?
  • 您陈述了您的目标,然后发布了不努力实现目标的代码。您还没有针对您遇到的问题提出特定的问题。尝试编写一些代码来完成您的任务,如果它不起作用,请提出问题

标签: java file


【解决方案1】:
Properties prop = new Properties();
prop.load("pathToPropertiesFile");


String key; //This is the key which user will enter
String propKey = prop.getProperty(key);
if(propKey == null)
{
    // Key is not present so enter the key into the properties file
      prop.setProperty("keyName", key);
}
else
{
    // Throw error saying key already exists
      out.println("Key "+key+" already exists.");
} 

请参阅Here 以获取有关 Java 属性的更多信息和示例

更新: 好的,如果您想检查是否存在(与任何键无关)这样的值,请使用此代码

   // Ignoring the loading of the properties file
   // Assuming properties file is loaded in "prop"
   Enumeration keySet = prop.keys();
   String key; // This is the key which user will enter
   boolean keyExists = false;
   while(keySet.hasMoreElements())
   {
       String keyName = (String) keySet.nextElement();
       String keyValue = prop.getProperty(keyName);
       if( key.equals(keyValue))  //Check against all the keys' value present
       {
           keyExists = true;
           break;
       }
   }

   if(keyExists)
   {
       //throw error
   }
   else
   {
       //insert key
   }

方法是获取所有存在的键并检查其值。如果属性文件中的值与用户输入的值相同,否则你就知道要做什么了

如果您想对 KeyName 进行检查,那么只需更改循环中的 if 条件

if( key.equals(keyName))  //Check against all the key Name present in the properties file
{
 keyExists = true;
 break;
}

希望这会有所帮助!

【讨论】:

  • 我没有用常量键存储值。每次更改键值时。它可以是 key1、key2 或 key3。
  • 因此请酌情输入key(手动或编程)。我没有看到问题。
  • 是的,在输入密钥时确保不要重复密钥名(如@AndrewThompson 所述以编程方式输入)
【解决方案2】:

查看Properties 类。它有一些可能有用的相关方法;

load()
save()
setProperty()
containsKey()

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2014-01-27
    • 2014-01-19
    • 1970-01-01
    相关资源
    最近更新 更多