2017-09-25 8 views
1

상대 경로를 사용하여 주 방법에서 내 리소스 폴더의 JSON 파일 양식을 가져 오려고합니다. 이 코드는 절대 경로를 사용하여 작동하지만, 원하는 경우 내 프로젝트에서 jar 파일을 빌드하면 중단됩니다.상대 경로를 사용하여 리소스 폴더에서 JSON 파일을 가져올 수 없습니다.

public static void main(String[] args) throws FileNotFoundException { 
// Read in database 
db = Database.read(Thread.currentThread().getContextClassLoader().getResource("JSON/inhabitants.json").toExternalForm()); 
names = db.getAllNames(); 

읽기는 입력 스트림을 사용하여 파일을 읽는 데이터베이스의 메소드를 호출합니다.

java.io.FileNotFoundException : 파일 :

public static Database read(String filename) throws FileNotFoundException { 
    InputStream is = new FileInputStream(filename); 
    Reader reader = new InputStreamReader(is); 

    return gson.fromJson(reader, Database.class); 
    } 

내가 점점 오전 오류는 다음과 /Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json java.io.FileInputStream.open (네이티브 메서드)에서 java.io.FileInputStream.open (FileInputStream.java:195)에서 java.io.FileInputStream. (FileInputStream.java:138)에서 java.io.FileInputStream.open0 (해당 파일 또는 디렉토리 없음) 에서 java.io.FileInputStream. (FileInputStream.java:93) 에 Core.Database.re 광고 Main.main에서 (Database.java:22) (Main.java:51) ... 11 I이 무엇인지 모른다 있도록 디렉토리에있는 파일이 /Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json

그러나 존재

더 잘못되어가는. 여기

내 폴더 구조 (메이븐 기본 구조)입니다 :

folder structure

여전히 수 나를 jar 파일로 배포하는 솔루션이 있습니까?

EDIT (25/09) : 내가 대신의 getResource의 같이 getResourceAsStream를 사용하는 경우, 나는 다음과 같은 오류가 점점 오전 :

Caused by: java.io.FileNotFoundException: [email protected] (No such file or directory) 
at java.io.FileInputStream.open0(Native Method) 
at java.io.FileInputStream.open(FileInputStream.java:195) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at java.io.FileInputStream.<init>(FileInputStream.java:93) 
at Core.Database.read(Database.java:22) 
at Main.main(Main.java:51) 
... 11 more 
+0

그냥 정보를 위해 왜 json 파일을 대상 폴더에 넣고 있습니까? 타겟은 빌드 폴더이며,'mvn clean '을 할 때마다 지워질 것입니다. – amicoderozer

+0

목적을 달성하지 못했고 파일을 리소스 폴더에 추가했습니다. 아티팩트를 빌드 할 때 타겟 폴더에 추가했습니다. –

답변

1

을 당신은을 포함하는 (실행 단지 내에서 파일을 읽을 getResourceAsStream을 사용해야합니다 파일 수 : src\main\resources)!

+0

getResourcAsStream을 사용하여 파일을 찾을 수 없습니다. –

+0

사용하는 개발 환경을 알지 못합니다. 예를 들면 그것을 실행하면. 이클립스에서 이클립스는이 호출을 마치 한 병 안에 있었을 때처럼 처리해야하지만 한 병 안에 무엇이 들어 있는가? 그러면 룩업은 classpath로 이동하고'src \ main \ resources'가 classpath에 있어야합니다! 시나리오에 해당되는지 확인하십시오. (이클립스에서'src \ main \ resources'를 오른쪽 클릭 -> "빌드 경로"-> "소스 폴더로 사용") –

+0

IntelliJ Ultimate Edition을 사용하고 있으며 리소스는 기본 리소스 폴더로 설정되어 있습니다 –