2012-06-23 5 views
3

나는 이미 SO를 조사하여 적절한 것을 찾지 못했습니다.Java를 통해 jar 파일이있는 디렉토리 만들기

jar에서 프로그램을 시작할 때 jar 파일이있는 디렉토리에 폴더를 만들어야합니다. 사용자가 jar 파일을 저장하는 위치는 중요하지 않습니다.

다음은 내가 연주 한 최신 코드입니다. System.out.println은 올바른 디렉토리를 출력하지만 폴더는 생성되지 않습니다. 대조적으로, 지금은 모든 것이 내 System32 폴더에 저장됩니다.

public static String getProgramPath() throws IOException{ 
    String currentdir = System.getProperty("user.dir"); 
    currentdir = currentdir.replace("\\", "/"); 
    return currentdir; 

} 

File dir = new File(getProgramPath() + "Comics/");//The name of the directory to create 
    dir.mkdir();//Creates the directory 
+0

왜 \\를 /로 바꾸시겠습니까? –

+0

디렉토리를 만드는 방법을 알아 내려고했습니다. 그것은 \를 a로 대체하는 데 사용 되었기 때문에/경로가 Windows에서 올바르게 변환됩니다. 방금 작업 할 수 없었습니다./ –

+1

user.dir은 고정되어 있으며 항아리가있는 곳의 영향을받지 않는 홈 디렉토리입니다. 그리고 디렉토리의 이름 사이에 "/"가 필요합니다 (디렉토리 사이의 분리 문자 인 후행 슬래시는 포함되지 않습니다)와 "만화". 우연히도, 여러분의 user.dir은 항아리가있는 dir 일 수 있습니다. 이 dir을 사용하여 작성하는 것이 가장 좋은 아이디어는 아닙니다. 사용자는 종종 프로그램이 설치된 디렉토리에 쓸 수 없습니다. –

답변

3

Jar 경로를 얻으려면 user.dir 디렉토리를 가져 오는 것보다 약간 힘들 수 있습니다. 이유를 기억할 수는 없지만 user.dir은 모든 상황에서이 경로를 안정적으로 반환하지 않습니다. 당신이 절대적으로 병의 길을 가져야 만한다면, 당신은 약간의 흑 마법을하고 우선 수업의 보호를 받아야합니다. 뭔가 같은 : 당신은 할 수 없습니다 경우에도이 작동하도록 보장 할 수 없습니다, 당신은 (보안상의 이유로 예를 들어) 그냥 시간이 있다는 사실에 자신을 사임해야합니다

import java.io.File; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.net.URL; 
import java.net.URLDecoder; 

import javax.swing.JOptionPane; 

public class MkDirForMe { 
    public static void main(String[] args) { 
     try { 
     String path = getProgramPath2(); 

     String fileSeparator = System.getProperty("file.separator"); 
     String newDir = path + fileSeparator + "newDir2" + fileSeparator; 
     JOptionPane.showMessageDialog(null, newDir); 

     File file = new File(newDir); 
     file.mkdir(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 

    public static String getProgramPath2() throws UnsupportedEncodingException { 
     URL url = MkDirForMe.class.getProtectionDomain().getCodeSource().getLocation(); 
     String jarPath = URLDecoder.decode(url.getFile(), "UTF-8"); 
     String parentPath = new File(jarPath).getParentFile().getPath(); 
     return parentPath; 
    } 
} 

항아리 경로를 얻으려고.

+0

완료! 고맙습니다!! –

+0

@ 마이클 : 천만에요! –

1

일부 변경 사항 (예 : 만화 전에 "/"추가)을 사용하여 예상 한대로 디렉토리를 생성 할 수있었습니다. 여기 내가 사용한 전체 코드가 있습니다.

import java.io.*; 
public class TestClass { 

     public static String getProgramPath() throws IOException{ 
       String currentdir = System.getProperty("user.dir"); 
       currentdir = currentdir.replace("\\", "/"); 
       return currentdir; 

     } 
     public static void main(String[] argv) { 
       try { 
         String d = getProgramPath() + "/Comics/"; 
         System.out.println("Making directory at " + d); 
         File dir = new File(d);//The name of the directory to create                      
         dir.mkdir();//Creates the directory                            
       } 
       catch (Exception e) { System.out.println("Exception occured" + e);} 
     } 
} 

"/"등의 코드를 하드 코딩하지 마십시오. 이 경우에는 무엇이 옳은지 OS에 묻는 내장 라이브러리를 사용하십시오. 이것은 기능이 (쉽게) 크로스 플랫폼을 깨지 못하게합니다.

물론 예외를 올바르게 잡으십시오. 이것은 코드를 작동하는 것으로 몰드하려는 빠르고 쉬운 시도입니다.

+1

사용자가 JAR을'java -jar/foo/bar/some.jar'로 실행하고 현재 현재 디렉토리로'/ foo/bar'를 가지고 있지 않은 경우 이것은 작동하지 않습니다. –

+0

아, 내 잘못이야. 내 대답을 삭제하는 방법을 모르겠다. –

+0

내 프로그램으로 코드를 사용하려고 할 때 어떤 이유로 작동하지 않는다! 그것은 하나의 테스트 클래스 파일로 작동합니다. 매우 이상한 ... –

관련 문제