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
, чтобы получить каноническое представление, которое, если бы вы хотели, имели бы обратную косую черту, а не косые черты.
Очень болезненный и не работает с входами пользователя. – Aubin
Действительно ..!? Не могли бы вы немного просветить? Не кажется более дорогим с двумя новыми экземплярами файла? –
@Aubin: В каком смысле это «очень больно»? И где вопрос упоминает что-нибудь о пользовательском вводе? –