阅读凭据文件的有效方法

时间:2015-10-26 11:46:21

标签: java filereader

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

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());

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

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

数据库信息文件

  

密码::密码
  用户名::用户名
  DataBase :: url:port

电子邮件信息文件

  

密码::密码
  用户名::用户名
  收件人:: 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;
        }
    }

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

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"));

2 个答案:

答案 0 :(得分:2)

为什么不使用属性文件?很容易读取和写入属性文件和单个属性。

示例属性文件:

database=database
user=user
password=password

答案 1 :(得分:0)

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