programing

경로의 File.separator와 슬래시의 차이

itsource 2022. 7. 27. 23:09
반응형

경로의 File.separator와 슬래시의 차이

를 사용하는 것의 차이점은 무엇입니까?File.separator 일반 및 and and and/Java Path-String java 、 「 」

백슬래시와는 \\플랫폼 독립성은 이유가 되지 않는 것 같습니다.Windows Unix 에에에에에에 。

public class SlashTest {
    @Test
    public void slash() throws Exception {
        File file = new File("src/trials/SlashTest.java");
        assertThat(file.exists(), is(true));
    }

    @Test
    public void separator() throws Exception {
        File file = new File("src" + File.separator + "trials" + File.separator + "SlashTest.java");
        assertThat(file.exists(), is(true));
    }
}

바꿔 , '만일'이라면,/는, Unix 와 로 왜 굳이 Unix ® Windows 를 가 있습니까?왜이 사용 ?용 용? ???File.separator

은 you 다 you you youFile.separator머나먼 땅, 이상한 물건과 낯선 사람들의 땅, 말이 울고 소가 모든 엘리베이터를 작동시키는 플랫폼 위에서 언젠가 당신의 프로그램이 실행될지도 모르기 때문입니다.이 땅에서는 전통적으로 ":" 문자를 파일 구분자로 사용해왔기 때문에 JVM은 그들의 뜻에 충실하게 따릅니다.

하는 Java 하게 사용할 수 ./(백슬래시가 아닌) 모든 플랫폼에서 사용할 수 있습니다.라이브러리 코드는 내부에서 플랫폼 고유의 경로로 변환하는 작업을 처리합니다.

하면 것 요.File.separator그러나 UI에서는 Java에서 무엇이 말이 되는지 보여주는 것이 아니라 OS에서 무엇이 말이 되는지 보여주는 것이 가장 좋기 때문입니다.

업데이트: 검색한 지 5분 만에 문서화된 "늘 슬래시를 사용할 수 있습니다" 동작을 찾을 수 없습니다.문서화된 건 봤겠지만 공식 참고 자료를 찾을 수 없을 때(기억이 완벽하지 않기 때문에)File.separator그게 통할 거란 걸 알잖아요

File를 떨어져에게는, JVM 의 실장이 File.Separator 를 됩니다)./ a :이 이를 windows jvm으로 과 마찬가지로 v-in-in-in-in-in-in-in-in-in으로 대체한 것입니다.\를 참조해 주세요.

다만, 파일 참조를 작성하지 않고 취득해, 해석할 필요가 있는 경우가 있습니다.이를 수행하려면 플랫폼상의 구분자를 알아야 합니다.File.Separator를 사용하면 도움이 됩니다.

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.
File.java ~ 행 (428 ~435 )File.<init>:

String p = uri.getPath();
if (p.equals(""))
    throw new IllegalArgumentException("URI path component is empty");

// Okay, now initialize
p = fs.fromURIPath(p);
if (File.separatorChar != '/')
p = p.replace('/', File.separatorChar);

그러면한번읽어볼까요?fs/*(FileSystem)*/.fromURIPath() 삭제:

java.io.java.io 에 System(File System)
문자열 from public abstract 문자열:URIPath(URIPath)
필요에 따라 지정된 URI 경로 문자열을 후처리합니다."/c:/foo" "c:/foo" "c:/foo" "c:/foo" 입니다.경로 문자열에 슬래시 구분 기호가 있습니다. 이 메서드가 반환된 후 파일 클래스의 코드가 변환합니다.

은 ①을 의미합니다.FileSystem.fromURIPath()에 대한 그 이유는 URI이기 때문입니다.을 하다

p = p.replace('/', File.separatorChar);

에 의존하는 '/'(으)로 .seperatorChar모든 OS에서 '/'이(가) 안전하다는 것을 항상 확인할 수 있습니다.

OS는 Unix나 Windows(휴대용 디바이스 등)보다 많고, Java는 휴대성이 뛰어나다고 알려져 있습니다.베스트 프랙티스를 사용하면 JVM이 해당 OS에 가장 적합한 것을 판단할 수 있습니다.

들어올 때는 별 차이가 없지만 돌아올 때는 별 차이가 없어요.

새 파일(String 경로)에서 '/' 또는 '\' 중 하나를 사용할 수 있지만 File.getPath()는 둘 중 하나만 제공합니다.

파티에 늦었다.JDK 1.8 이클립스 MARS 1 이클립스 Windows 10 이클립스 MARS 1 입니다.
것 같아요.

getClass().getClassLoader().getResourceAsStream("path/to/resource");

동작하고 있다

getClass().getClassLoader().getResourceAsStream("path"+File.separator+"to"+File.separator+"resource");

동작하지 않습니다.

getClass().getClassLoader().getResourceAsStream("path\to\resource");

동작하지 않습니다.마지막 두 가지는 같다.그래서... File.separator를 사용하지 않는 이유가 있습니다.

단순하고 심플한 휴대성.

"Java SE8 for Programmers"는 자바가 어느 쪽에도 대응할 것이라고 주장한다.(p.480, 마지막 단락).이 예에서는 다음과 같은 주장을 하고 있습니다.

c:\Program Files\Java\jdk1.6.0_11\demo/jfc

잘 해석됩니다.마지막(Unix 스타일) 구분 기호를 적어 둡니다.

이것은 촌스럽고 오류가 발생하기 쉽지만, 그들은 그렇게 주장한다(Deitel과 Deitel

자바가 아닌 사람들의 혼란이 이(오?)기능을 사용하지 않는 충분한 이유라고 생각합니다.

신사들이 다양한 세부사항으로 차이를 설명했듯.

Apache Commons io api, class 사용을 추천합니다.FilenameUtils여러 OS에 전개할 가능성이 있는 프로그램 내의 파일을 처리할 때 사용합니다.

파일 또는 디렉토리의 경로 이름은 호스트 시스템의 명명 규칙을 사용하여 지정합니다.그러나 File 클래스는 플랫폼에 의존하지 않는 방식으로 파일 및 디렉토리 이름을 처리하는 데 사용할 수 있는 플랫폼에 의존하는 상수를 정의합니다.

files.seperator는 경로 이름의 디렉토리와 파일 구성요소를 구분하는 문자 또는 문자열을 정의합니다.UNIX, Windows 및 Macintosh의 경우 이 구분자는 각각 '/', '\' 또는 ':'입니다.

Java 7 을 사용하고 있는 경우는, Path.resolve() Paths.get()체크 아웃 합니다.

File.separator를 사용하여 Ubuntu는 디렉토리 대신 이름에 "\"가 있는 파일을 생성했습니다.파일(및 디렉토리)을 만드는 방법을 게을리하고 있기 때문에 이름에 "\"가 있는 파일을 피하기 위해 매번 "/"를 사용할 수 있었습니다.

Linux 세퍼레이터를 사용하여 (데이터베이스에 저장되어 있는) 준비 경로에서 파일을 작성하려고 할 경우 어떻게 해야 합니까?

파일을 작성하려면 다음 경로를 사용하십시오.

new File("/shared/folder/file.jpg");

구분자하다, 윈도우는 다른 구분자를 합니다.\그럼 슬래시 세퍼레이터를 플랫폼으로 변환하는 대체 방법은 독립적입니까?들면 다음과 같습니다.

new File(convertPathToPlatformIndependent("/shared/folder"));

방법 ★★★★convertPathToPlatformIndependent"/"는 File.Separator로 지정합니다.

글쎄요, 플랫폼 독립형 언어(예: Java)는 이미 다음 언어 사용을 지원하고 있습니다./Windows "Linux"그러나 경로를 사용하여 매번 이 변환을 기억해야 하는 경우 이는 악몽이 될 것이며 미래의 애플리케이션(@Pointy가 설명한 우주에서는 실제적인 이점을 얻을 수 없을 것입니다)을 실현할 수 있습니다.

언급URL : https://stackoverflow.com/questions/2417485/difference-between-file-separator-and-slash-in-paths

반응형