这是问题所在:
我尝试使用Paths.get(string)
,Paths.get(URI)
,Paths.get(".").relativize(Path other)
等进行创建。始终使用相同的结果。
logger.info("referencePattern.getLocation().getYearFolder(year): "
+ referencePattern.getLocation().getYearFolder(year));
File rootFolder = new File(referencePattern.getLocation().getYearFolder(year));
logger.info("rootFolder.getAbsolutePath(): " + rootFolder.getAbsolutePath());
logger.info("rootFolder.getPath(): " + rootFolder.getPath());
logger.info("System.getProperty(\"user.dir\"): " + System.getProperty("user.dir"));
File[] files = rootFolder.listFiles(filter);
输出:
referencePattern.getLocation().getYearFolder(year): /dvl/app/srs/tomcat/data/dg/ep/docs_autres/commeenne/com/2018/
rootFolder.getAbsolutePath(): /dvl/app/srs/tomcat/temp//dvl/app/srs/tomcat/data/dg/ep/docs_autres/commeenne/com/2018
rootFolder.getPath(): /dvl/app/srs/tomcat/data/dg/ep/docs_autres/commeenne/com/2018
System.getProperty("user.dir"): /dvl/app/srs/tomcat/temp
答案 0 :(得分:0)
来自comment:
getYearFolder(year)
将以下内容写入日志:
/dvl/app/srs/tomcat/data/ep/docs_autres/commeenne/com/2018/
getYearFolder(year).getBytes("UTF-8")
写道:
[36, 123, 115, 121, 115, 58, 117, 115, 101, 114, 46, 104, 111, 109, 101, 125, 47, 100, 97, 116, 97, 47, ...]
显示的字节代表字符串:
${sys:user.home}/data/
似乎logger.info(...)
正在进行替换,将${sys:user.home}
替换为记录输出中的/dvl/app/srs/tomcat
。
在Java代码中看到的实际值是${sys:user.home}/data/ep/docs_autres/commeenne/com/2018/
,它不以/
开头,因此被视为相对路径,因此getAbsolutePath()
为当前目录的前缀({{ 1}}),导致:
/dvl/app/srs/tomcat/temp
然后记录器执行替换:
/dvl/app/srs/tomcat/temp/${sys:user.home}/data/ep/docs_autres/commeenne/com/2018/
需要考虑的事项:
如果/dvl/app/srs/tomcat/temp//dvl/app/srs/tomcat/data/ep/docs_autres/commeenne/com/2018/
应该返回文件路径,为什么会返回getYearFolder(year)
?
在什么时候(代码中的哪个地方)${sys:user.home}
应该被替换?
确实需要在调用 ${sys:user.home}
之前。
如果getAbsolutePath()
返回的路径已经被认为是绝对路径,为什么要调用getAbsolutePath()
?
这些问题的答案应该为如何解决问题提供指导。