2014-12-20 11 views
1

Ниже приведена строка, которая строит путь к каталогу в java.Запрос на символ обратной косой черты

Здесь File.separator «\» на окнах и «/» на Unix.

String path = System.getProperty("user.home") + File.separator + "workspace" + 
               File.separator + "JavaCode"; 

Если я жёстко путь, он должен выглядеть, как показано ниже:

File path = new File("C:\\users\\david\\workspace\\JavaCode"); 

Мой вопрос:

Почему мы упоминаем \\ во втором случае?

+1

Так как вы пишете обратную косую черту в _string literal_ – Alnitak

+1

Этот жесткий код не будет компилироваться: вы присваиваете 'File' переменной' path' типа 'String'. – bcsb1001

+0

@ bcsb1001 это была опечатка – overexchange

ответ

2

Потому что, со строкой, \ является побег характер: он говорит, что интерпретировать следующий характер особым образом (поэтому \n не является n). В вашем случае вы хотите, чтобы \ сам интерпретировался по специальному адресу , но не, рассматривая его как особый, поэтому вам нужно 2 из них: первый говорит «лечить следующий символ особый», следующий обрабатывается специально для \.

+0

Но почему я не нуждался в двух обратном скелете при использовании 'File.separator'? – overexchange

+0

Откуда вы знаете, что это не то, что есть * в * File.separator? –

+0

Вы имеете в виду 'S.O.P (File.separator);' на самом деле имеет \ "\" и отображает "\" на консоли? для косой черты '/' это не должно быть правильно? – overexchange

2

Это связано с тем, как строковые литералы определены в Java. Обратная косая черта используется для некоторых управляющих последовательностей (например, "\n", "\r" и других), поэтому буквальная обратная косая черта также является escape-последовательностью ("\\").

Назад к коду однако, не беспокойтесь, используйте java.nio.file вместо:

final Path path = Paths.get(System.getProperty("user.home"), "workspace", 
    "JavaCode"); 

Works для каждой ОС виртуальная машина (7+) работает на.

Он правильно вернет Path для "C:\\users\\david\\workspace\\JavaCode" на вашем компьютере так же, как он возвращает один для "/home/fge/workspace/JavaCode" на моем.

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