2013-05-19 3 views
3

Если операционная система - это Windows, какой из приведенных ниже способов лучше всего подходит для Java?Практический пример Java-файла

1)

String f = "some\\path\\file.ext";
2)
String f = "some/path/file.ext";
3)
String f = "some"+File.separator+"path"+File.separator+"file.ext";
4)
String f = new StringBuilder("some").append(File.separator).append("path").append(File.separator).append("file.ext").toString();

ответ

8

EDIT: С учетом замечаний, я должен уточнить. Это определенно зависит от контекста. Что ты пытаешься сделать? Если вы пытаетесь создать путь к файлу в «родной» формат операционной системы, я хотел бы использовать вариант 5, используя File:

File f = new File("some"); 
f = new File(f, "path"); 
f = new File(f, "file.ext"); 

Или лучше поставить эту логику в метод:

public static File newFile(String root, String... parts) { 
    // TODO: Check that nothing's null (root, parts, each element of parts) 
    File ret = new File(root); 
    for (String part : parts) { 
     ret = new File(ret, part); 
    } 
    return ret; 
} 

Тогда вы можете назвать его:

File f = SomeUtilityClass.newFile("some", "path", "file.ext"); 

(. Вполне возможно, что это существует где-то в последнее время JREs, но если это так, я не знаю где)

Если вам нужно только то, что будет работать для FileInputStream и т.д., то я может просто жестко закодировать форвардные-слэш, по двум причинам:

  • Они легче читать, чем обратный слэш
  • Они будут работать на других операционных системах тоже

в любом случае, я бы, наверное, все-таки создать File, поскольку это дает более четкое значение к значению. Большинство IO API в Java принимают File, где это уместно, - и это делает очевидным для всего кода, окружающего его, что - это путь к файлу. Таким образом, вы можете использовать:

File file = new FIle("some/path/file.ext"); 

... и это все равно будет работать на Windows. Затем вы можете использовать File.getCanonicalFile, чтобы получить каноническое представление, которое, если бы вы хотели, имели бы обратную косую черту, а не косые черты.

+0

Очень болезненный и не работает с входами пользователя. – Aubin

+0

Действительно ..!? Не могли бы вы немного просветить? Не кажется более дорогим с двумя новыми экземплярами файла? –

+0

@Aubin: В каком смысле это «очень больно»? И где вопрос упоминает что-нибудь о пользовательском вводе? –

2

Jon Skeet Правильно, но я хочу сказать, что Microsoft налагает использование \ только в командном интерпретаторе. Каждый раз, когда в API вы можете использовать /.

Таким образом, вы можете использовать String f = "some/path/file.ext"; всюду, но в ProcessBuilder, если запущенная программа - cmd.exe.

Чтобы преобразовать пути, я использую String.replaceAll("\\\\", "/");

+0

Возможно, вы можете передать путь к файлу и в другие программы, которые слишком чувствительны. (например, вещи, которые разбиваются на '\\', чтобы найти файлы.) –

+0

Плохое программирование: в C/C++ под Windows я использую /, никогда \, но я согласен с вами, это риск – Aubin

1

Дорожки часто хранятся в файлах свойств, для большинства приложений, с которыми я работал, мы всегда использовали альтернативный 2.

Одна из причин этого заключается в том, что он выглядит аналогично между окнами и linux.

/путь или C:/пути

это также самая чистая и наиболее читаемой альтернатива.

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