Java Spring启动:CsvReader类未正确从application.properties读取文件名
晚上好,程序员们, 我是Spring Boot新手,在下面的设置中看不出我做错了什么 application.properties已被删除 io.input\u file=“C:\Projects\validation\validation\u input.csv” ApplicationController.java将io.input_文件读取到inputFilename字段并正确输出。 我正确地看到/parameters网页上显示的文件名 java的main()调用List inputRows=new CsvReader().read(); OpenCSV读写器正确查找和处理CSV文件内容 我的问题是CsvReader.java硬编码了C:\Projects\validation\validation\u input.csv文件名。 我想用ValidationController.inputFilename替换硬编码的文件名 它总是空的 我不理解或缺少什么? 提前谢谢大家,, 电子人 application.properties文件:Java Spring启动:CsvReader类未正确从application.properties读取文件名,java,spring,spring-boot,properties,controller,Java,Spring,Spring Boot,Properties,Controller,晚上好,程序员们, 我是Spring Boot新手,在下面的设置中看不出我做错了什么 application.properties已被删除 io.input\u file=“C:\Projects\validation\validation\u input.csv” ApplicationController.java将io.input_文件读取到inputFilename字段并正确输出。 我正确地看到/parameters网页上显示的文件名 java的main()调用List inputRow
endpoint.url = "http://192.168.7.180:7150/api/latest/ngene/search"
io.input_file = "C:\\Projects\\validation\\validation_input.csv"
io.output_file = "C:\\Projects\\validation\\validation_output.csv"
io.output_file_stats = "C:\\Projects\\validation\\validation_outputStats.csv"
// ValidationController.java
@RestController
public class ValidationController {
// Inject parameters from application.properties or application.yml: default if N/A
@Value("${endpoint.url: Endpoint URL: TBD}")
private String endpointURL; // URL can be tracked outside on confluence page
@Value("${io.input_file: input_file default path}")
private String inputFilename;
@GetMapping("/parameters")
public String readParameters() {
String output = "<b>Testing default localhost:8080/parameters</b>";
output += "<p>End point URL = " + endpointURL + "</p>";
output += "<p>Input file = " + inputFilename + "</p>";
return output;
}
}
// ValidationApplication.java:
@SpringBootApplication
public class ValidationApplication {
public static void main(String[] args) throws IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
SpringApplication.run(ValidationApplication.class, args);
// Lambda to print all
System.out.println("\n\n\nLambda printing of CSV data read in:");
List<InputData> inputRows = new CsvReader().read();
inputRows.forEach(inputData -> System.out.println("\t" + inputData));
List<OutputData> outputRows = new ArrayList<>();
System.out.println("\n\n\nValidationApplication::main(): reading, validating, and writing of CSV data:");
// Read each row, process, write out
for (int i = 0; i<inputRows.size(); i++) {
// Read row data
InputData inputData = inputRows.get(i);
System.out.println("\t" + i + ": " + inputData.toString());
// Validate data
System.out.println("\tValidate data here...");
// Write row data
String moreData = inputData.getData();
OutputData outputData = new OutputData(moreData);
System.out.println("\t" + i + ": " + outputData.toString() + "\n");
outputRows.add(outputData);
}
// Test the manual CSV writer with headers
CsvWriter csvWriter = new CsvWriter();
// Test the bean CSV writer without headers
csvWriter.write(outputRows);
}
}
// CsvReader.java:
public class CsvReader {
public List<InputData> read() throws FileNotFoundException {
// Get input filename
String inputFile = "C:\\Projects\\validation\\validation_input.csv";
// Create the CSV reader
FileReader fileReader = new FileReader(inputFile);
CsvToBean<InputData> csvToBean = new CsvToBeanBuilder<InputData>(fileReader)
.withType(InputData.class)
.build();
// Read/parse and close reader streams
return csvToBean.parse();
}
}
endpoint.url=”http://192.168.7.180:7150/api/latest/ngene/search"
io.input\u file=“C:\\Projects\\validation\\validation\u input.csv”
io.output\u file=“C:\\Projects\\validation\\validation\u output.csv”
io.output\u file\u stats=“C:\\Projects\\validation\\validation\u outputStats.csv”
//ValidationController.java
@RestController
公共类验证控制器{
//从application.properties或application.yml注入参数:如果不适用,则为默认值
@值(${endpoint.url:endpoint url:TBD}”)
私有字符串endpointURL;//可以在汇合页面外部跟踪URL
@值(${io.input\U文件:input\U文件默认路径}”)
私有字符串输入文件名;
@GetMapping(“/parameters”)
公共字符串readParameters(){
String output=“测试默认本地主机:8080/参数”;
输出+=“端点URL=“+endpointURL+””;
输出+=“输入文件=“+inputFilename+””;
返回输出;
}
}
//ValidationApplication.java:
@SpringBoot应用程序
公共类验证应用程序{
公共静态void main(字符串[]args)引发IOException、CsvDataTypeMismatchException、CsvRequiredFieldEmptyException{
run(ValidationApplication.class,args);
//Lambda打印所有
System.out.println(“\n\n\nLambda打印读取的CSV数据:”;
List inputRows=new CsvReader().read();
inputRows.forEach(inputData->System.out.println(“\t”+inputData));
List outputRows=new ArrayList();
System.out.println(“\n\n\nValidationApplication::main():读取、验证和写入CSV数据:”;
//读每一行、处理、写出
对于(inti=0;i,您需要将CSVReader带到spring中。在这种情况下,您可以将CSVReader注释为组件,并将inputFilename注入其中,然后使用它
或者,您可以通过构造函数将inputFilename传递给CSVReader并在那里使用它
public class CsvReader {
String inputFile ;
public CsvReader(String inputFile ){
this.inputFile =inputFile ;
}
}
我在一两处缺少@Controller注释。我添加了这些注释,在主文件中获得了文件名,并从中设置
我无法使传递了文件名的构造函数工作,但这也是学习新jazz的乐趣。我也会弄明白这一点
感谢Niyas的输入,它为我指出了正确的方向以获得答案。告诉我们如何将ValidationController.inputFilename提供给CsvReader。在main()中获取ValidationController.inputFilename时,我遇到了问题。当我得到它时,我会将它传递给构造函数,即CsvReader(ValidationController.getInputFilename())。这是事件的注释和顺序对我的挑战。谢谢Niyas。我正在注释CsvReader,&尝试字段注入,&失败!我缺少什么?@Component public class CsvReader{@Value(${io.input\u file:default input file}”)private String inputFile;public CsvReader(){}public List read()抛出FileNotFoundException{String inputFile=this.inputFile;//为null FileReader FileReader=new FileReader(inputFile);CsvToBean CsvToBean=new CsvToBeanBuilder…返回CsvToBean.parse();}您是否在ValidationController中自动连接CSVReader?spring是否注入了CSVReader的对象?早上好,是的,Niyas。我缺少@Controller annotation I 1或2个点。我添加了这些点,在主文件中获取了文件名,并从中进行了设置。我无法使传递文件名的构造函数工作,但再次强调,这是一种乐趣学习新爵士乐。我也会弄明白的。谢谢你的投入,跟进和关心:)。