2014-11-18 8 views
2

Windows에서 실행되도록 설계된 Java 코드에서 작업 중이며 Windows 스타일 경로 "System.getProperty ("user.dir ")을 사용하는 파일에 대한 참조가 많이 포함되어 있습니다. \ 쓰레기 \ blah ". 나는 그것을 채택하고 리눅스에 배치 할 책임이있다. "System.getProperty ("user.dir ")/trash/blah"와 같이 모든 경로 (\)를 유닉스 스타일 (/)로 변환하는 효율적인 방법이 있습니까? 어쩌면 java 또는 linux에서 \ as /를 사용하는 일부 구성 일 수 있습니다.Java 코드에서 Windows 스타일 경로를 UNIX 경로로 변환

답변

1

질문을 다시 읽고 경로 작성에 도움이 필요 없음을 알고 있습니다. 당신이하려는 일에 대해 나는 해결책을 찾을 수 없습니다. 최근에 프로젝트에서이 작업을 수행했을 때 모든 경로를 변환하는 데 시간이 걸렸습니다. 또한 "user.home"에서 루트 디렉토리로 작업하는 것이 내 응용 프로그램을 실행하는 해당 사용자에 대한 쓰기 액세스를 포함하는 것이 확실하다고 가정했습니다. 어쨌든 여기 내가 해결 한 몇 가지 경로 문제가 있습니다.

서로 다른 많은 장소에서이 일을 할 거라면
String windowsPath = "C:\temp\directory"; //no permission or non-existing in osx or linux 
String otherWindowsPath = System.getProperty("user.home") + "\Documents\AppFolder"; 
String multiPlatformPath = System.getProperty("user.home") + File.separator + "Documents" + File.separator + "AppFolder"; 

, 아마도 유틸리티 클래스를 작성하고 제공하는 toString() 메서드를 오버라이드 (override) :

나는 원래 Windows 코드과 같이 재 작성 너는 너의 유닉스 경로를 반복해서.

String otherWindowsPath = System.getProperty("user.home") + "\Documents\AppFolder"; 
otherWindowsPath.replace("\\", File.separator); 
0

스크립트를 작성하고 "\\"을 모두 하나의 슬래시로 바꾸십시오. 그러면 Java가 존경받는 OS 경로로 변환됩니다.

1

내 접근 방식은 Path 객체를 사용하여 경로 정보를 보유하고 연결 및 상대 경로를 처리합니다. 그런 다음 Path의 toString()을 호출하여 Path 문자열을 가져옵니다.

경로 분리 기호를 변환하기 위해 필자는 apache 공용 라이브러리의 FilenameUtils를 사용하는 것을 선호했습니다.

private String getRelativePathString(String volume, Path path) { 
    Path volumePath = Paths.get(configuration.getPathForVolume(volume)); 
    Path relativePath = volumePath.relativize(path); 
    return FilenameUtils.separatorsToUnix(relativePath.toString()); 
} 
: 상대 경로, toString, 세퍼레이터 변경,

String separatorsToSystem(String path); 
String separatorsToUnix(String path); 
String separatorsToWindows(String path) 

코드 조각을보고하십시오 : 그것은 세 가지 usefule 기능을 제공합니다