2016-07-14 2 views
0

Windows에서 특정 파일 경로를 찾는 방법이 있습니까? 예를 들어 내 로컬에서 putty.exe의 위치를 ​​찾고 싶다면 전체 파일 경로를 얻을 수있는 방법이 있습니까? apache commons-io 유틸리티를 사용하여 다음 코드를 시도했지만 로컬에 많은 파일이 있으므로 많은 시간이 걸립니다.Java를 사용하여 Windows에서 파일 경로 찾기

File dir = new File("C:\\"); 

String[] extensions = new String[]{"exe"}; 
IOFileFilter filter = new SuffixFileFilter(extensions, IOCase.INSENSITIVE); 

List<File> fileList = (List<File>) FileUtils.listFiles(dir, filter, DirectoryFileFilter.DIRECTORY); 

System.out.println("file list size "+fileList.size()); 
for (File file : fileList) { 
    if (file.getName().toLowerCase().contains("putty")) { 
     System.out.println(file.getPath()); 
    } 
} 

다른 빠른 방법이 있습니까?

편집 특히 putty.exe을 찾고 싶습니다.

+0

을 완료? PATH에 있으면 실행되고, 그렇지 않으면 디스크 전체를 살펴 봐야합니다. – EJP

+0

로컬에서 EXE를 실행하는 논리를 작성해야하지만 파일이있는 위치를 알지 못합니다. 다른 사용자의 경우 경로가 다를 수 있습니다. 그래서 파일 경로를 찾아서 실행해야합니다. –

+0

그건 내 요점이야. PATH에 있다면 알 필요가 없습니다. – EJP

답변

0

필요한 파일을 찾기 위해 전체 디스크를 검사 할 프로그램이 예상되지 않습니다.

프로그램 다음 방법 중 하나를 사용 : PATH 환경 변수에있는 디렉토리에서

  1. 봐,
  2. 설치시 파일의 위치를 ​​제공하기 위해 사용자가 필요 실행 파일을 찾을 때와 그들을 어딘가에 저장하십시오. 프로그램의 홈 디렉토리에 저장된 파일은 .ini 일 수 있습니다. Windows : 시스템 레지스트리 또는 사용자 또는 시스템 환경 변수 (레지스트리에서 끝나는 변수).
  3. 설치 프로그램은 프로그램에서 읽는 응용 프로그램 특정 환경 변수를 설정하는 시작 프로그램 쉘 스크립트를 작성합니다.

아마도 내가 생각하지 못한 몇 가지 다른 것들이있을 것입니다. 아이디어는 프로그램이 검색해야하는 장소를 제한하는 것입니다.

+0

내 코드가 여러 사용자에 의해 실행됩니다. 그들 각각은 어디서나 언급 된 경로를 가지지 않을 것입니다. 예를 들어 내 지역에 있습니다. 다운로드시 특정 .exe 파일이 있는데, 다른 사용자의 경우 다를 수 있습니다. 따라서 파일을 찾는 일반적인 시나리오가 없습니다. 내가 아는 전부는 파일 이름입니다. –

+0

그런 다음 사용자가 검색하는 동안 환자에게 환자에게 말하거나 환자에게 말하도록해야합니다. 그리고 그것을 찾을 때 언제든지 검색 할 수있는 위치를 고정하십시오. –

0

정규식으로 실행 파일을 설치하면 PATH 변수에 있습니다.

public static Optional<Path> exePath(String exeName) { 
    String pathVar = System.getenv("PATH"); 
    Pattern varPattern = Pattern.compile("%(\\w+)%"); 
    boolean tryVars = true; 
    while (tryVars) { 
     tryVars = false; 
     Matcher m = varPattern.matcher(pathVar); 
     StringBuffer sb = new StringBuffer(); 
     while (m.find()) { 
      tryVars = true; 
      m.appendReplacement(sb, System.getenv(m.group(1))); 
     } 
     m.appendTail(sb); 
     pathVar = sb.toString(); 
    } 
    String[] dirs = pathVar.split("\\s*;\\s*"); 
    for (String dir : dirs) { 
     Path path = Paths.get(dir, exeName); 
     if (Files.exists(path)) { 
      return Optional.of(path); 
     } 
    } 
    return Optional.empty(); 
} 

System.out.println(exePath("java.exe")); 

은 아마 VAR 패턴 대체 무슨 목적으로이 자동으로 (%의 JAVA_HOME % 및 등)

+0

일부 exe가 설치되어 있지 않습니다. 퍼티처럼. 다운로드 할 때'PATH' 변수에 경로가 언급되지 않은'.exe' 파일을 직접 가져옵니다. –

+0

*** 행운을 비네. *** PATH + 퍼티 * \ putty.exe' 같은 시도? Downloads 디렉토리를 추가 하시겠습니까? 전체 사용자의 디렉토리 트리를 검색 하시겠습니까? *** 아마도 그렇지 않습니다. *** 퍼티가 파일 형식을 등록한다고 생각하지 않습니다. 그래서'Desktop.getDestop.open (file)'은 퍼티를 시작합니다. 그러나 Windows에는 기능이 있습니다. Windows에는 선택적 파일 인덱싱 및 검색 기능이 있습니다. ** puted에 대한 항목을 유지할 수있는 ** regedit **가 있지만 관리자가 아닌 모든 관리자가 액세스 할 수있는 것은 아닙니다. 어쩌면 누군가는 알고 있습니다. –

+0

'Desktop.getDesktop(). open (file)'은 파일이 어디에 있는지를 아는 경우에만 파일을 실행합니다. 내 주요 문제는 모든 사용자에게 경로가 같지 않을 수 있다는 것입니다.:( –

관련 문제