我使用Spring Batch来解析csv文件。它在资源目录中的文件时很有用,但在其他地方不起作用。我搞错了
.*
我的代码
(r"/static/(.*)", tornado.web.StaticFileHandler,{'path': 'static'})
但是这段代码很好用
Caused by: java.lang.IllegalStateException: Input resource must exist (reader is in 'strict' mode): class path resource [c:/data/geodata1.csv]
答案 0 :(得分:2)
使用 org.springframework.core.io 中的 PathResource ,它对我有用
@Bean
@StepScope
public FlatFileItemReader<CourseCountry> reader(@Value("#{jobParameters[fullPathFileName]}") String pathToFile) {
return new FlatFileItemReaderBuilder<CourseCountry>()
.name("studentItemReader")
.resource(new PathResource(pathToFile))
.lineMapper(lineMapper())
.linesToSkip(1)
.build();
}
答案 1 :(得分:1)
我发现了同样的问题,并且我使用org.springframework.core.io.FileSystemResource类,如下所示: file:c:\ data \ geodata1.csv reader.setResource(new FileSystemResource(file));
答案 2 :(得分:0)
刚发现解决方案使用的是org.springframework.core.io.UrlResource;
类,而不是org.springframework.core.io.ClassPathResource;
答案 3 :(得分:0)
方案一:你可以使用PathResource如下
@Bean
public FlatFileItemReader<Person> reader() {
new FlatFileItemReaderBuilder<Person>()
.name("JobName")
.resource(new PathResource(getReceivedFilePath("Location")))
.targetType("Targetclass".class)
.linesToSkip(" count of no of lines to skip")
.delimited()
.delimiter(recordSeparator)
.includedFields(new Integer[] { 0, 1})
.names(new String[] { "param1 in target class","param2 in target class etc" })
.build();
}
你传递给 PathResource 的 getReceivedFilePath 应该如下,它接受任何以 etc 开头或结尾的文件
public String getReceivedFilePath(String fileName) {
File directory = new File(file.location);
if (directory.isDirectory()) {
File[] files = directory.listFiles((dir, name) -> name.toLowerCase().endsWith("extension.type"));
for (File file : files) {
if (FilenameUtils.getBaseName(file.getName()).startsWith(FilenameUtils.getBaseName(fileName))) {
return file.getAbsolutePath();
}
}
}
return directory.getName();
}
解决方案 2:您可以使用 PathResource,但您的文件名应与您提供的确切路径相匹配
例如:new PathResource("C:\files\filename.csv")