读取凭证文件的有效方法

efficient way for reading credential files

我必须阅读两个文本文件,其中包含有关某些 java 应用程序的数据库连接和用户电子邮件帐户的凭据信息。 这将在几个不同的项目中完成,所以我决定将它移到一个单独的 class.
我确实创建了这个 class 用于读取数据库凭据

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class GetDbCredentials {
   public static String USR;
   public static String PSW;
   public static String DB;

    public GetDbCredentials(String filePath){
        readFile(filePath);
    }
    public void readFile(String file){
         try {
             if(new File(file).exists()){
                 BufferedReader fr=new BufferedReader(new FileReader(file));
                 String input;
                 String[] credentials;

                 while ((input=fr.readLine())!=null){
                     credentials=input.split("::");

                    switch (credentials[0]){
                        case "Username":
                            USR=credentials[1];
                            break;
                        case "Password":
                            PSW=credentials[1];
                            break;
                        case "DataBase":
                            DB=credentials[1];
                            break;                      
                    }
                 }
                 fr.close();            
             }              
         } catch (IOException e) {
             e.printStackTrace();           
         }
    }
    public String getPassword(){
        return PSW;
    }
    public String getUser(){
        return USR;
    }
    public String getDb(){
        return DB;
    }       
}

这有效,

System.out.println("psw:\t"+new GetDbCredentials(args[0]).getPassword());
System.out.println("usr:\t"+new GetDbCredentials(args[0]).getUser());
System.out.println("DB:\t"+new GetDbCredentials(args[0]).getDb());

现在我将不得不或多或少地在不同的 class 上创建相同的内容来阅读电子邮件信息。我只是在想是否有更好的方法来处理这些问题,也许可以找到一种方法将两个 class 加在一起。
也许调用 class GetCredentials("email","emailfile.txt") 使用字符串参数来实现我需要阅读哪两个,因为电子邮件信息文件包含收件人列表我不能使用完全相同的方法

补充信息: 我不担心安全问题。这些应用程序将在安全系统上 运行。我只想让用户能够更改提供的信息,而不是硬编码,也不能在 Internet 上查看(在 git 等下)

数据库信息文件

Password:: password
Username:: username
DataBase:: url:port

电子邮件信息文件

Password:: password
Username:: username
recipients:: email1@example.com email2@emample.com

谢谢大家, 然后我选择了这个解决方案

public class GetCredential {
private String fileName;

    public GetCredential(String file){
        this.fileName=file;
    }   
    public String getProp(String title){

        Properties prop = new Properties();
        try {
            prop.load(new FileInputStream(fileName));
            return prop.getProperty(title);
        } catch (IOException e) {
            e.printStackTrace();
                    return null;
        }
    }

在调用 class 时,我传递了文件和 属性 我想要的

System.out.println("psw:\t"+new GetCredential(args[0]).getProp("Password"));
System.out.println("usr:\t"+new GetCredential(args[0]).getProp("Username"));
System.out.println("DB:\t"+new GetCredential(args[0]).getProp("DataBase"));

System.out.println("psw:\t"+new GetCredential(args[1]).getProp("Password"));
System.out.println("usr:\t"+new GetCredential(args[1]).getProp("Username"));
System.out.println("DB:\t"+new GetCredential(args[1]).getProp("Recipients"));

为什么不使用属性文件?非常容易读写属性文件和单个属性。

示例 属性 文件:

database=database
user=user
password=password

您也可以使用spring PropertyPlaceholderConfigurer 加载您的 属性 文件。您可以查看示例 here