File.separator 또는 File.pathSeparator


519

에서 File클래스가 두 개의 문자열이있다, separator하고 pathSeparator.

차이점이 뭐야? 언제 다른 것을 사용해야합니까?


6
명명은 약간 혼란스럽고, 이와 같은 것이 필요한 것은 빠르다는 것은 명백합니다 (Perl 참조). pathSeparatorCharseparatorChar 의 예제를 보십시오 . 또는 간단한 니모닉을 사용하십시오. pathSeparator는 경로를 구분합니다.
maaartinus 님이

6
둘 다 화면에 인쇄하는 데 시간이 걸리면 귀하의 질문에 대한 답변이 될 것입니다 ...
Jean-François Corbett

13
일반적으로 동의하지만 시스템에 인쇄하면 다른 운영 체제의 변형이 표시되지 않습니다.
b1nary.atr0phy 2

답변:


681

당신이 의미하는 경우 File.separatorFile.pathSeparator다음 :

  • File.pathSeparator파일 경로 목록에서 개별 파일 경로를 구분하는 데 사용됩니다. Windows에서 PATH 환경 변수를 고려하십시오. ;Windows에서는 파일 경로를 구분하기 위해 a 를 사용 File.pathSeparator합니다 ;.

  • File.separator중입니다 /또는 \그 특정 파일의 경로를 분할하는 데 사용됩니다. 예를 들어 Windows에서는 \또는C:\Documents\Test


6
처럼 보인다 File.separator해야한다 File.fileSeparator에 관한File.pathSeparator
에디

1
@Eddy 당신의 요점을 보았지만 클래스 이름이이므로 중복 될 수 있습니다 File. 파일 부분이 암시되어 있다고 생각합니다. 그러나 누가 왜 Java로 많은 일을했는지 ​​알고 있습니다.
user489041

117

파일 경로를 만들 때 구분 기호를 사용합니다. 유닉스에서 구분 기호는 /입니다. 따라서 유닉스 경로를 만들고 /var/temp싶다면 다음과 같이하십시오 :

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

pathSeparator클래스 경로와 같은 파일 목록을 처리 할 때를 사용합니다 . 예를 들어, 앱에서 jar 목록을 인수로 사용하는 경우 유닉스에서 해당 목록의 형식을 지정하는 표준 방법은 다음과 같습니다./path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

따라서 파일 목록이 주어지면 다음과 같이 할 것입니다.

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

5
* nix 경로를 빌드하는 경우 이미 플랫폼 종속 코드가 있으므로 /var/temp사용하는 것이 쓸모가 File.separator없습니다. 경로를 하드 코딩 할 수도 있습니다.
isapir

109

java.io.File클래스에는 4 개의 정적 분리 자 변수가 있습니다. 더 나은 이해를 위해 일부 코드의 도움으로 이해합시다

  1. separator : 플랫폼에 따른 기본 이름 분리 문자 (문자열)입니다. Windows의 경우 '\'이고 유닉스의 경우 '/'입니다.
  2. separatorChar : separator와 동일하지만 char입니다.
  3. pathSeparator : 경로 분리자를위한 플랫폼 종속 변수. 예를 들어 Unix 시스템에서 ':'으로 구분 된 경로의 PATH 또는 CLASSPATH 변수 목록과 ';' Windows 시스템에서
  4. pathSeparatorChar : pathSeparator와 동일하지만 char입니다.

이들 모두는 최종 변수이며 시스템에 따라 다릅니다.

다음은 이러한 구분 기호 변수를 인쇄하는 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);
    }

}

유닉스 시스템에서 위 프로그램의 출력 :

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");

1
Java에서 백 슬래시 문자는 실제로 \\입니다. 단일 백 슬래시는 다른 특수 문자 속기의 이스케이프 문자이므로 백 슬래시 자체가 이스케이프되는 데 사용되기 때문입니다. Stringchar상기 방법에 의해 반환은 (Windows의 경우) 올바른 형식의 백 슬래시를 반환 않습니다.
Erik

새 파일 ( "tmp / abc.txt"); 이것은 Windows와 Linux에서는 거의 일치하지 않지만 유닉스 새 파일 ( "tmp \\ abc.txt")에는 거의 없습니다. 이것은 유일한 문제입니다
DEV-Jacol
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.