读取凭证文件的有效方法
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
我必须阅读两个文本文件,其中包含有关某些 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