java - linux环境下新建绝对路径文件

标签 java linux file path absolute

问题是:

  1. 正确检索到我们要分析的文件夹的路径。
  2. 我们为该文件夹创建文件(假定为 AbsolutePath)。打印 AbsolutePath 现在会向原始路径添加前缀。
  3. getPath 中的内容应该包含在 getAbsolutePath 中。
  4. 添加到路径中的是运行 JVM 的目录...我们提供的绝对路径被错误地解释为相对路径。
  5. 我们无法检测到Ep中的文件,因为文件路径不存在。

我尝试使用 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

最佳答案

来自 comment :

getYearFolder(year) writes the following to the log:

/dvl/app/srs/tomcat/data/ep/docs_autres/commeenne/com/2018/

getYearFolder(year).getBytes("UTF-8") writes:

[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() 为当前目录 (/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() 被调用之前。

  • 如果 getYearFolder(year) 返回的路径应该是绝对路径,为什么要调用 getAbsolutePath()

这些问题的答案应该提供如何解决问题的指导。

关于java - linux环境下新建绝对路径文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682276/

相关文章:

Delphi 搜索文件和目录最快的算法

linux - 将数据从一个文件添加到另一个文件

java - 按位 AND 运算符 (&) 没有像我预期的那样工作

java - 联赛赛程的排列

java - 如何使用一个流并将结果保存到多个地方?

linux - 如何正确查看 VirtualBox 全屏?

c - 不完全是先进先出

java - 为什么java中字符的大小是2字节?

linux - 是否只搜索从我执行搜索的位置开始至少两层深度的文件?

python - 如何使用 docker run 命令将 json 文件作为参数传递