File.separator или File.pathSeparator

В File класс есть две строки, separator а также pathSeparator,

Какая разница? Когда я должен использовать один над другим?

4 ответа

Если ты имеешь ввиду File.separator а также File.pathSeparator затем:

  • File.pathSeparator используется для разделения отдельных путей к файлам в списке путей к файлам. Рассмотрим в Windows переменную среды PATH. Вы используете ; разделить пути к файлам так в Windows File.pathSeparator было бы ;,

  • File.separator либо / или же \ это используется, чтобы разделить путь к определенному файлу. Например на Windows это \ или же C:\Documents\Test

java.io.File класс содержит четыре статических переменных-разделителя. Для лучшего понимания давайте разберемся с помощью некоторого кода

  1. разделитель: зависимый от платформы символ разделителя имен по умолчанию в виде строки. Для Windows это '\', а для Unix это '/'
  2. separatorChar: то же самое, что и разделитель, но это символ
  3. pathSeparator: Зависимая от платформы переменная для пути-разделителя. Например, список переменных PATH или CLASSPATH, разделенных ':' в системах Unix и ';' в системе Windows
  4. pathSeparatorChar: То же, что pathSeparator, но это символ

Обратите внимание, что все они являются конечными переменными и зависят от системы.

Вот Java-программа для печати этих переменных-разделителей. FileSeparator.java

import java.io.File;

public class FileSeparator {

    public static void main(String[] args) {
        System.out.println("File.separator = "+File.separator);
        System.out.println("File.separatorChar = "+File.separatorChar);
        System.out.println("File.pathSeparator = "+File.pathSeparator);
        System.out.println("File.pathSeparatorChar = "+File.pathSeparatorChar);
    }

}

Вывод вышеуказанной программы в систему Unix:

File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :

Вывод программы на систему Windows:

File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;

Чтобы сделать нашу программную платформу независимой, мы всегда должны использовать эти разделители для создания пути к файлу или чтения любых системных переменных, таких как PATH, CLASSPATH.

Вот фрагмент кода, показывающий, как правильно использовать разделители.

//no platform independence, good for Unix systems
File fileUnsafe = new File("tmp/abc.txt");
//platform independent and safe to use across Unix and Windows
File fileSafe = new File("tmp"+File.separator+"abc.txt");

Вы используете разделитель при создании пути к файлу. Так что в Unix разделитель /, Так что, если вы хотите построить путь Unix /var/temp вы бы сделали это так:

String path = File.separator + "var"+ File.separator + "temp"

Вы используете pathSeparator когда вы имеете дело со списком файлов, как в пути к классам. Например, если ваше приложение приняло список jar-файлов в качестве аргумента, стандартный способ форматирования этого списка в unix: /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

Итак, учитывая список файлов, вы бы сделали что-то вроде этого:

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);

В разных операционных системах в качестве разделителей файлов и путей используются разные символы. Когда нашему приложению приходится работать на нескольких платформах , нам нужно правильно с этим справиться.

Разделитель файлов

Разделитель файлов - это символ, используемый для разделения имен каталогов, составляющих путь к определенному месту.

      String fileSeparator = File.separator;
// or
String fileSeparator = FileSystems.getDefault().getSeparator();
// or
char fileSeparatorChar = File.separatorChar;

Результат будет зависеть от операционной системы хоста.

В Windows это: \

В Mac и ОС на базе Unix это: /

Разделитель пути

Разделитель путей - это символ, обычно используемый операционной системой для разделения отдельных путей в списке путей.

      String pathSeparator = File.pathSeparator;
// or
char pathSeparatorChar = File.pathSeparatorChar;

В Windows это: ;

В Mac и ОС на базе Unix это: :

Другие вопросы по тегам