Прямая косая черта или обратная косая черта?

Я ищу, чтобы писать и читать текстовые файлы в и из (соответственно) каталога, отличного от каталога моей программы. Когда я укажу каталог для записи или чтения, должен ли я использовать косые черты или обратную косую черту для идентификации пути к файлу?

Ответ 1

Использование косой черты сделает ее независимой от системы. Я бы придерживался этого для простоты.

Рассмотрите возможность использования java.io.File.separator, если вы когда-либо показываете путь к пользователю. Вы бы не удивили этих пользователей Windows. Они очень много.

Ответ 2

Я никогда не обнаружил, что он документирован в любом месте, но классы JDK позволяют использовать слэши, независимо от того, находитесь ли вы в Windows или нет. (Вы можете увидеть это в источнике JDK, где он явно преобразует разделители путей для вас.)

Официально — и, конечно же, в любом пользовательском интерфейсе, который вы делаете — вы должны использовать системное свойство file.separator , которое доступно через System.getProperty (список стандартных системных свойств документирован в документах для System.getProperties):

String sep = System.getProperty("file.separator");

... а также через поля static Они также доступны как file.separatorFile.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/...