Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动:CsvReader类未正确从application.properties读取文件名_Java_Spring_Spring Boot_Properties_Controller - Fatal编程技术网

Java Spring启动:CsvReader类未正确从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

晚上好,程序员们, 我是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文件:

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个点。我添加了这些点,在主文件中获取了文件名,并从中进行了设置。我无法使传递文件名的构造函数工作,但再次强调,这是一种乐趣学习新爵士乐。我也会弄明白的。谢谢你的投入,跟进和关心:)。