하는 방법을 구축하는 Jar 파일 외부 파일 포함

0

질문

나는 포함하고 싶은 텍스트 파일로서 resources 폴더에 Jar 파일입니다. 여기에는 최소한의 예:

import java.io.File;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.readFile( "test.txt" );
    }

    public void readFile(String fileName){
        File file = new File( getClass().getResource( fileName ).getPath() );

        try{
            Scanner scanner = new Scanner( file );
            while ( scanner.hasNextLine() ){
                System.out.println( scanner.nextLine() );
            }
        }catch (Exception e){
            System.out.println( e );
        }
    }
}

여기에는 무엇이 test.txt 파일:

hello
world

이것은 어떻게 프로젝트처럼 보인:

enter image description here

나는 할 수 있는 코드를 실행합니다. 방법은 내가 생성되 항아리는 다음과 같습니다:

enter image description here

나는 이미 추가 resources 폴더를 클릭하여"+"기호입니다. 그러나 제가 생성된 Jar 파일,그것은 여전히 불평 FileNotFoundException.

어떤 방법이 있나요?

intellij-idea jar java
2021-11-18 02:01:21
1

최고의 응답

1

new File 는 파일을 나타냅. 으로서, 파일. 항목에 jar 파일이지 않습니다.

귀하의 코드 작동할 수 없습니다 당신이 원하는 무엇을 할 수 있다.

파일이 잘못된 추상화입니다. 할 InputStream 또는 URL 을 수 있는 파일을 나타냅,네트워크 스트림,즉석에서 생성되는 재료,그리고,그래 항목에 jar 파일이 있습니다.

public void readFile(String fileName) {
  try (var in = ThisClass.class.getResourceAsStream(fileName)) {
    Scanner scanner = new Scanner(in, StandardCharsets.UTF_8);
    // proceed here.
  } catch (IOException e) {
    throw new RuntimeException("Uncaught", e);
  }
}

몇 일에서는 snippet:

  • ThisClass.classgetClass(). 이 getClass 로 나누기 때 당신은 서브 클래스. 되지 않을 수도 있습 그렇지만,여기 있는 나중에,그것의 더 나은 코드를 작성하는 작품을 할 때 그것은 단지 짧습니다.
  • 그것은 리소스,닫아야 합니다. 이 코드에 따라서 사용하는 시도와-리소스입니다.
  • 우리는 InputStream(getResourceAsStream 반환합니다 inputstream),오른쪽 추상화 수준을 나타낼 수 있는 항목이 내부에 항아리(대 File 는 그냥 그렇게 할 수 없).
  • 우리는 스캐너에 어떤 문자셋을 인코딩이다. 그렇지 않으면 당신이 얻는 플랫폼을 기본적으로는 잘못하고 불쾌한:자신의 컴퓨터에 그것은 항상 작업에,당신은 그것을 실행하에서 다른 시스템과 그것은 실패합니다. 언제나,항상 지정 charset 인코딩은 언제나 바이트로 설정 문자(또는 그 반대로).
  • e.printStackTrace() 한다. 하지 않는 예외를 처리하는 방법입니다. 는 경우에 당신은 아무 생각이 없다(그리고 공정한 여기는 경우 발생 IOEx,명확하게 뭔가가 나쁘게 잘못은 그것의 좋은 아이디어에 대한 응용 프로그램에 충돌만큼 세부입 가능)-위의 올바른 방법을 처리합니다.
2021-11-18 02:07:53

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................