Я ищу, чтобы писать и читать текстовые файлы в и из (соответственно) каталога, отличного от каталога моей программы. Когда я укажу каталог для записи или чтения, должен ли я использовать косые черты или обратную косую черту для идентификации пути к файлу?
Прямая косая черта или обратная косая черта?
Ответ 1
Использование косой черты сделает ее независимой от системы. Я бы придерживался этого для простоты.
Рассмотрите возможность использования java.io.File.separator
, если вы когда-либо показываете путь к пользователю. Вы бы не удивили этих пользователей Windows. Они очень много.
Ответ 2
Я никогда не обнаружил, что он документирован в любом месте, но классы JDK позволяют использовать слэши, независимо от того, находитесь ли вы в Windows или нет. (Вы можете увидеть это в источнике JDK, где он явно преобразует разделители путей для вас.)
Официально — и, конечно же, в любом пользовательском интерфейсе, который вы делаете — вы должны использовать системное свойство file.separator
, которое доступно через System.getProperty
(список стандартных системных свойств документирован в документах для System.getProperties
):
String sep = System.getProperty("file.separator");
... а также через поля static
Они также доступны как file.separator
(и File.separatorChar
).
Вы также можете использовать различные функции класса java.io.File
для объединения и разделения путей и/или различных функций интерфейсов и классы в java.nio.file
.
Ответ 3
Вы тоже можете использовать.
Если вы используете /
, вам нужна только одна косая черта.
Если вы используете \
, вам нужно использовать \\
. То есть вам нужно избежать этого.
Вы также можете использовать метод resolve()
класса java.nio.Path
для добавления каталогов/файлов в существующий путь. Это позволяет избежать проблем с использованием косой черты вперед или назад. Затем вы можете получить абсолютный путь, вызвав метод toAbsolutePath()
, за которым следует toString()
SSCCE:
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathSeperator {
public static void main(String[] args) {
// the path seperator for this system
String pathSep = System.getProperty("path.separator");
// my home directory
Path homeDir = Paths.get(System.getProperty("user.home"));
// lets print them
System.out.println("Path Sep: " + pathSep);
System.out.println(homeDir.toAbsolutePath());
// as it turns out, on my linux it is a colon
// and Java is using forward slash internally
// lets add some more directories to the user.home
homeDir = homeDir.resolve("eclipse").resolve("configuration");
System.out.println("Appending more directories using resolve()");
System.out.println(homeDir);
}
}
Ответ 4
Вы должны использовать /
Например, C:/User/...