2016-10-03 4 views
0

Я, как указано в заголовке, пытается прочитать файл из пути, предоставленного мне как String, расположенного в файле Tomcat-Context.Чтение текстового файла из пути, начинающегося с /// и содержащего двоеточие

Путь начинается с "/// C:". В системах Unix он начнется с «/ C:». В настоящее время я пытаюсь сделать следующее:

MyPath = Paths.get("///C:" + filename); 
byte[] encoded = Files.readAllBytes(MyPath); 
String JsonString = new String(encoded); 

это приводит к этой ошибке: «Недопустимый символ [:] в пути с индексом 4: ///C:/file.json»

Я знаю, что Windows не любит Colons в своих Paths, но когда я вырезаю ведущую подстановку «///» из Path, окна могут ее обработать. (Но это не помогает мне, так как это хрупкий и очень плохой способ кодирования. Также он не работает на половине серверов)

Я довольно shure, это просто я не понимаю путь -соглашение об именовании. Итак, каким образом следует обращаться с такими путями?

Приветствия: Junge

+0

Вы также должны помнить, что не все используют C: (некоторые люди имеют D :) –

+0

ведущий «/// C: /» не является реальной статической строкой. Я просто заменил его на вопрос, поэтому его легче читать. В действительности это будет установлено контекстом сервера. Но спасибо за помощь. – Junge

ответ

1

Моя ошибка была , что я не рассматривал URL-адрес, который я получил в качестве URL-адреса. Следующий фрагмент кода сделал трюк:

MyPath = Paths.get(new URL("///C:" + filename).toURI());

Он работает на обеих системах. Я думаю, что Paths.get() понимает «///» только в URL-адресах.

0

Мое предложение было бы проверить ОС вы на первом с System.getProperty() (как константа будет более эффективным ИМО, но в зависимости от программы):

private static final boolean Windows = System.getProperty("os.name").contains("indow"); 

Это будет справедливо, если вы на Windows, и ложным для другой (Linux/OS X)

затем вы должны проверить, если вы на Windows, в тот момент, вы передаете свой путь к файлу. Если это правда подстроку() необходимо (например, : прохождение «C:» вместо «/// C:»), в противном случае дать ему, как и для других ОС:

MyPath = Paths.get((Window ? drive.substring(3) : drive) + filename); 
+0

Эй, спасибо. Возможно, это работает, я недавно узнал, что если вы получаете URL-адрес, вы должны рассматривать его как одно, а не как простое String. Следующий фрагмент кода сделал трюк: 'MyPath = Paths.get (новый URL (" /// C: "+ имя файла) .toURI());' Он работает в обеих системах. – Junge

+0

Спасибо, что дайте мне знать! Вы можете сказать это как ответ кстати. – fab

Смежные вопросы