我有一个springboot命令行应用程序,其中一个生产命令行参数是绝对基本路径。对于这个例子,我们称之为
“/var/batch/”
我正在为我的作品设定基本路径。像这样的yml文件有一个默认值。
公司: base Path:${base Path:/var/默认/}
然后,我有一个应用程序Config.java文件,它使用该基本路径来创建一堆类似的文件路径。
@ConfigurationProperties(prefix = "company")
public class ApplicationConfig {
private String basePath;
public String getPrimaryCarePath() {
return basePath + "ADAP-2-PCProv.dat";
}
public String getPrimaryCareDetailPath() {
return basePath + "ADAP-2-" + getBatchNo() + ".det";
}
... additional files.
}
最后,文件路径像这样被传递到我的css解析器中。
public List<T> readCsv() throws IOException {
try (BufferedReader bufferedReader = Files.newBufferedReader(Paths.get(filePath))) {
return new CsvToBeanBuilder(bufferedReader)
.withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
.withType(subClass)
.withSeparator('\t')
.withIgnoreLeadingWhiteSpace(true)
.build().parse();
}
}
现在在生产中一切正常,但是当试图运行突变测试时,我们面临一些问题。看起来csv解析器正在寻找绝对路径,而不是相对路径。我们的application-test.yml文件中有以下路径。
company:
basePath: src/test/resources/
我们所有的测试文件都存储在测试资源包中,所以我的问题是如何使用填充应用程序配置的测试资源的相对路径。java文件,同时仍然能够使用生产的绝对路径?我想我可以使用ClassPathResource用测试设置覆盖basepath,但想知道是否有更好的方法。
您需要两种配置:一种用于资源,另一种用于绝对路径。
我建议添加一个新的属性app.file.path.type
,具有值资源
和绝对
。您可以定义一个名为FileProvider
的新接口。
public interface FilePathProvider(){
Path getFilePath();
}
您可以使用@conditionalnproperty
定义两个不同的bean,并设置文件路径策略:
@Configuration
public class ApplicationConfig{
@Bean
@ConditionalOnProperty(
name = "app.file.path.type",
havingValue = "absolute")
public FilePathProvider absoluteFilePathProvider(ApplicationConfig applicationConfig){
return () -> Paths.get(applicationConfig.getBasePath());
}
@ConditionalOnProperty(
name = "app.file.path.type",
havingValue = "resources")
@Bean
public FilePathProvider resourceFilePathProvider(ApplicationConfig applicationConfig){
return () -> Paths.get(this.getClass().getClassLoader().getResource(applicationConfig.getBasePath()).getPath());
}
}
在开发和测试模式下,您将拥有应用程序。文件路径type=resources
并且在生产中您将拥有应用程序。文件路径类型=绝对值
。这种方法的优点是,在开发中也可以将属性设置为absolute
。
问题内容: 是否有任何API可以从绝对文件路径检索文件名? 例如来自 我知道它可以像字符串操作一样工作, 但是我想知道还有没有像Java 这样的“正式”方式可以做到这一点。 NodeJS从绝对路径获取文件名? 问题答案: 使用模块的方法: 这是上面示例的文档。
本文向大家介绍获取Java中文件的绝对路径,包括了获取Java中文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件的绝对路径。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbsolutePath(
我也试着做 而我不断得到这个结果。
我的项目中有一个名为x.txt的文件,它与一个接受x并读取x的文件位于同一目录中。但是,当使用JUnit测试时,如果我在不同的PC上测试,它将具有不同的文件x.txt的绝对路径 我如何做到这一点,使我不需要输入绝对文件路径,但可以硬编码的相对文件路径使用?
本文向大家介绍JAVA获取文件绝对路径的方法,包括了JAVA获取文件绝对路径的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JAVA获取文件绝对路径的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Java程序设计有所帮助。