Новый файл в среде Linux с абсолютным путем - PullRequest
0 голосов
/ 04 июня 2018

Это проблема:

  1. Правильно найден путь к папке, которую мы хотим проанализировать.
  2. Мы создаем файл для этой папки (с suposely 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

1 Ответ

0 голосов
/ 05 июня 2018

От комментарий :

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() ставит префикс текущего каталога (/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() вызывается, если путь, возвращаемый getYearFolder(year), уже должен быть абсолютным?

Ответы на эти вопросы должны содержать рекомендации по устранению проблемы.

...