java 예제 - 올바른 파일 분리 문자를 사용하도록 문자열 경로를 변환 할 Java 유틸리티가 있습니까?




5 Answers

아파치 커먼즈가 다시 구출된다. 커먼즈 IO 메서드 FileNameUtils . separatorsToSystem() 이 원하는 것을 처리합니다.

말할 필요도없이, Apache Commons IO는 훨씬 더 많은 작업을 수행 할 것이며 가치가있다.

사용법 jfilechooser

Java로 파일을 조작하는 많은 클래스를 개발했습니다. 나는 리눅스 박스에서 일하고 있으며, new File("path/to/some/file"); 행복하게 타이핑했다 new File("path/to/some/file"); . 커밋 할 시간이 왔을 때 프로젝트의 다른 개발자 중 일부는 Windows를 사용하고 있음을 깨달았습니다. 이제는 "/path/to/some/file" 형식의 String을 취할 수있는 메서드를 호출하고 OS에 따라 올바르게 구분 된 경로를 반환하고 싶습니다.

예 :
"path/to/some/file" 은 Windows에서 "path\\to\\some\\file" 됩니다.
Linux에서는 주어진 String을 리턴한다.

이 작업을 수행 할 수있는 정규 표현식을 작성하는 데 오랜 시간이 걸리지는 않을 것이라고 생각하지만 휠을 재발견하려는 것은 아니며 제대로 테스트 된 솔루션을 선호합니다. JDK에 내장되어 있다면 좋겠지 만, 일부 작은 F / OSS 라이브러리의 일부이기도하다.

그래서 올바른 파일 구분 문자를 사용하도록 문자열 경로를 변환 할 Java 유틸리티가 있습니까?




새로운 Java 7에는 Paths라는 클래스가 포함되어 있으므로 원하는 작업을 정확하게 수행 할 수 있습니다 ( http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html ).

다음은 그 예입니다.

String rootStorePath = Paths.get("c:/projects/mystuff/").toString();



당신은

System.getProperty("file.separator")

경로를 나타내는 문자열을 작성 하시겠습니까?




Java Paths에는이 구멍이 있다고 생각합니다.

String rootStorePath = Paths.get ( "c : / projects / mystuff /"). toString ();

사용해야하는 파일 시스템이있는 시스템에서 실행중인 경우 작동합니다. 지적했듯이, 현재 OS 파일 시스템을 사용했습니다.

Windows와 Linux 사이의 경로로 작업해야합니다. 하나에서 다른 것으로 파일을 복사하십시오. "/"모든 작품을 사용하는 동안 당신은 모든 자바 명령을 사용하는 것 같아요,하지만 그래서 / 또는 file.separator 등을 사용하여 SFTP를 호출해야합니다 ... 도와주지 않습니다. 광산을 "지금"실행중인 기본 파일 시스템으로 변환하기 때문에 Path ()를 사용할 수 없습니다.

Java가 필요로하는 것 :
`윈도우 시스템 : 경로 posixPath = Paths.get ( "/ home / mystuff", FileSystem.Posix); / home / mystuff /에 있으며 \ home \ mystuff로 변환되지 않습니다.

리눅스 시스템에서 문자열 winPath = Paths.get ( "c : \ home \ mystuff", FileSystem.Windows) .toString ();`은 c : \ home \ mystuff에 있으며 / c : / home / mystuff

문자 집합 작업과 비슷합니다.

URLEncoder.encode ( "whatever here", "UTF-8") .getBytes ();

추신 : 나는 또한 전체 아파치 io jar 파일을로드하기를 원하지 않는다. 이 경우 그들은 내가 제안한 것을 어쨌든 가지지 않습니다.




String fileName = Paths.get(fileName).toString();

혼합 경로가있는 경우에도 Windows와 완벽하게 작동합니다 (예 :

c : \ users \ username / myproject \ myfiles / myfolder

된다

c:\users\username\myproject\myfiles\myfolder

죄송합니다 위의 리눅스 만들 것이라고 확인하지 않았지만 다시 리눅스 파일 구조가 그래서 당신이 같은 디렉토리를 검색하지 않을 다른 것입니다




Related

java string file-io cross-platform jdk1.6