File.separator 대 FileSystem.getSeparator () 대 System.getProperty (“file.separator”)?


136

플랫폼 독립적 인 "파일 분리기"를 플랫폼 독립적으로 얻는 세 가지 동일한 방법 이있는 것 같습니다 .

언제 사용할 것인지 어떻게 결정합니까?

그들 사이에도 차이가 있습니까?


실제로 플랫폼 종속 파일 구분 기호를 얻지 못합니까? 플랫폼 독립적 인 저택에서.
steinybot 2018

@Steiny, Yea가 업데이트되었습니다.
Pacerier

전형적인 자바 질문에는 적어도 3 가지 이상의 답변이 있습니다
Stimpson Cat

답변:


142

System.getProperties()System.setProperty(String key, String value)명령 줄 매개 변수를 호출 하거나 명령 줄 매개 변수를 사용 하여 재정의 할 수 있습니다.-Dfile.separator=/

File.separator 기본 파일 시스템의 구분자를 가져옵니다.

FileSystems.getDefault() 기본 파일 시스템을 얻습니다.

FileSystem.getSeparator()파일 시스템의 구분 문자를 가져옵니다. 하나의 JVM에서 여러 파일 시스템에서 코드를 조작해야하는 경우 인스턴스 메소드로이를 사용하여 기본값 이외의 다른 파일 시스템을 코드로 전달할 수 있습니다.


2
Cool = D Btw "여러 파일 시스템 운영"부분을 자세히 설명해 주시겠습니까?
Pacerier

4
@Pacerier 이론적으로, ":"의 구분 문자가있는 새 파일 시스템 (BringerFS)을 작성했고 NTFS와 BringerFS에 각각 2 개의 파티션이있는 시스템을 가지고 있다면이 기능을 사용하여 두 가지를 모두 사용할 수 있습니다. 또한 Java 파일 시스템 공급자를 작성했습니다).
Bringer128

누군가가 하나의 Windows와 하나의 UNIX에 두 개의 파티션을 가지고 있고 그의 Windows 파티션에서 내 응용 프로그램을 실행하고 있다고 말하는 것처럼 실제로 유용하다는 것은 클래스가 그의 UNIX 파일 시스템에 액세스 할 수 있다는 것 입니까? (다른 FileSystem이 설치되어 있지 않기 때문에 실제로 테스트 할 수 없습니다.)
Pacerier

1
Windows의 파일 시스템 용 드라이버 대부분이 'Windows 스타일'파일 시스템 API로 변환되어 OS 및 이식 불가능한 앱이 작동 할 수 있다고 생각합니다. 실제적인 사용법은 Windows와 같은 고정 된 패러다임없이 이상하고 멋진 파일 시스템을 지원하는 OS에 대한 것이어야합니다.
Bringer128

아, 그리고 다른 질문에 대답하기 위해- FileSystem처리 한 각 파일 시스템마다 다른 인스턴스가 있습니다.
Bringer128

31

코드가 파일 시스템 경계를 넘지 않는 경우, 즉 하나의 파일 시스템으로 작업하는 경우을 사용하십시오 java.io.File.separator.

설명에 따라 FS의 기본 구분 기호가 표시됩니다. Bringer128이 설명했듯이 System.getProperty("file.separator")명령 줄 옵션을 통해 재정의 할 수 있으며 유형만큼 안전하지 않습니다 java.io.File.separator.

마지막 java.nio.file.FileSystems.getDefault().getSeparator();은 Java 7에서 도입되었으므로 코드를 이전 Java 버전에서 이식 가능하게하려면 지금은 무시해도됩니다.

따라서 이러한 옵션은 모두 다른 옵션과 거의 동일하지만 완전히 다릅니다. 필요에 맞는 것을 선택하십시오.


인가 java.io에 찬성되지 java.nio?
Pacerier

13
@Pacerier : 아니요, 더 이상 사용되지 않습니다. java.io보다 약간 낮은 수준 java.nio이지만 여전히 매우 광범위하게 유용합니다. 차이점은 blogs.oracle.com/slc/entry/javanio_vs_javaio 에서 확인할 수 있습니다 . nio를 대체하지 않고 io여러 가지 방법으로 확장 io하고 후드 아래에서 사용합니다 .
darioo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.