java创建文件名,对象发送模式
我正在使用外部配置文件,例如Springboot中的application.yml,程序复制了文件并重命名了文件,但是如果我需要另一个模式,请更改文件名,然后在代码中进行更改 让我们假设以下代码:java创建文件名,对象发送模式,java,string,format,Java,String,Format,我正在使用外部配置文件,例如Springboot中的application.yml,程序复制了文件并重命名了文件,但是如果我需要另一个模式,请更改文件名,然后在代码中进行更改 让我们假设以下代码: public class Pet { private chain name; private rope bread; private chain size; PrivateVar private chain; Getters and Setters .... } 我用下面的代码来命名文件: P
public class Pet {
private chain name;
private rope bread;
private chain size;
PrivateVar private chain;
Getters and Setters ....
}
我用下面的代码来命名文件:
Pet pet = getPet();
String fileName = String.format ("% s_% s_% s_% s", pet.getName (), pet.getBread (), pet.getSize (), pet.getOtherVar ());
这就是问题所在,它不是动态的
我认为,在我的配置文件中,我可以编写模式并发送一个对象作为输入,并让用户组织名称
String.format (pattern_from_the_file_config, pet);
我可以这样做吗?或者有什么方法可以这样做吗?考虑使用一种方法(本例中为Pet)来指定并返回文件名
如果它对你来说还是太硬了,也许反思会有帮助
但它确实不被推荐,很危险,只有在必要时才应该使用。在使用它之前要三思而后行。这样做,您将失去对代码正确性的控制(例如,如果您在配置文件中键入错误的类字段/方法名称而出错)。正如Peteef所提到的,这种技巧需要使用Java反射API。如果您意识到潜在的问题,请考虑下面的代码片段:
//...
String fileName = getFileName(classNameFromConfigFile);
//...
String getFileName(String className) throws Exception {
Class<?> clazz = Class.forName(className);
StringBuilder nameBuilder = new StringBuilder();
String nameSeparator = "_";
for(Field field : clazz.getDeclaredFields()) {
nameBuilder.append(nameSeparator).append(field.getName());
}
return nameBuilder.toString();
}
/。。。
字符串文件名=getFileName(classNameFromConfigFile);
//...
String getFileName(String className)引发异常{
Class clazz=Class.forName(className);
StringBuilder nameBuilder=新的StringBuilder();
字符串名称分隔符=“\”;
for(字段:clazz.getDeclaredFields()){
append(nameSeparator).append(field.getName());
}
返回nameBuilder.toString();
}
为什么不简单地重写ToString()方法
根据你的例子:
@Override
public String toString() {
return String.format ("% s_% s_% s_% s", pet.getName (), pet.getBread (), pet.getSize (), pet.getOtherVar ());
}
这将动态更改。如果配置文件的文件名具有唯一的命名方案,以便您的程序能够区分配置文件和普通文件,您不认为这是一个好主意吗??