Java 애플리케이션에 파일을 어떻게로드해야합니까?
Java 애플리케이션에 파일을 어떻게로드해야합니까?
짧은 대답
다음 두 가지 방법 중 하나를 사용하십시오.
예를 들면 :
InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");
-
긴 대답
일반적으로 절대 경로를 사용하여 파일을로드하고 싶지 않습니다. 예를 들어, 도움이된다면 이렇게하지 마십시오.
File file = new File("C:\\Users\\Joe\\image.jpg");
이 기술은 최소한 두 가지 이유로 권장되지 않습니다. 첫째, 특정 운영 체제에 대한 종속성을 생성하여 응용 프로그램이 다른 운영 체제로 쉽게 이동할 수 없도록합니다. Java의 주요 이점 중 하나는 다양한 플랫폼에서 동일한 바이트 코드를 실행할 수 있다는 것입니다. 이와 같은 절대 경로를 사용하면 코드의 이식성이 훨씬 떨어집니다.
둘째, 파일의 상대적 위치에 따라이 기술은 외부 종속성을 생성하고 응용 프로그램의 이동성을 제한 할 수 있습니다. 파일이 응용 프로그램의 현재 디렉터리 외부에 있으면 외부 종속성이 생성되고 응용 프로그램을 다른 컴퓨터로 이동하려면 종속성을 알고 있어야합니다 (오류 발생 가능성).
대신 클래스 의 getResource()
메서드를 사용하십시오 Class
. 이것은 응용 프로그램을 훨씬 더 이식 가능하게 만듭니다. 다른 플랫폼, 시스템 또는 디렉토리로 이동할 수 있으며 여전히 올바르게 작동합니다.
getResource는 괜찮지 만 작업 디렉토리의 위치를 제어 할 수있는 한 (일반적으로 가능) 상대 경로를 사용하는 것도 마찬가지로 작동합니다.
또한 구분 문자와 관련된 플랫폼 종속성은 File.separator , File.separatorChar 또는 System.getProperty ( "file.separator")를 사용하여 확인할 수 있습니다 .
구성 또는 데이터 (예 : 입력 파일) 또는 리소스로 파일을로드하고 있습니까?
- 자원으로서 Will과 Justin이 제시 한 제안과 예를 따르십시오.
- 구성 인 경우 ResourceBundle 또는 Spring을 사용할 수 있습니다 (구성이 더 복잡한 경우).
- 내부 데이터를 처리하기 위해 파일을 읽어야하는 경우이 코드 조각이 도움이 될 수
BufferedReader file = new BufferedReader(new FileReader(filename))
있으며 파일file.readLine();
을 닫는 것을 잊지 마세요를 사용하여 파일의 각 줄을 읽을 수 있습니다.
Windows에서도 유닉스 스타일 경로 구분 기호를 사용하는 데 문제가 없었습니다 ( File.separatorChar 를 확인하는 것이 좋지만 ).
ClassLoader.getResource () 를 사용하는 기술은 JAR 파일에서로드 할 읽기 전용 리소스에 가장 적합합니다. 때로는 관리자가 구성 할 수있는 파일이나 서버 애플리케이션에 유용한 애플리케이션 디렉토리를 프로그래밍 방식으로 결정할 수 있습니다 . (물론 사용자가 편집 할 수있는 파일은 System.getProperty ( "user.home") 디렉토리에 저장해야합니다 .)
public byte[] loadBinaryFile (String name) {
try {
DataInputStream dis = new DataInputStream(new FileInputStream(name));
byte[] theBytes = new byte[dis.available()];
dis.read(theBytes, 0, dis.available());
dis.close();
return theBytes;
} catch (IOException ex) {
}
return null;
} // ()
참고 URL : https://stackoverflow.com/questions/6639/how-should-i-load-files-into-my-java-application
'developer tip' 카테고리의 다른 글
배포 인증서가 만료되면 어떻게됩니까? (0) | 2020.11.13 |
---|---|
Pandas MultiIndex DataFrame에서 행 선택 (0) | 2020.11.12 |
iOS 앱에서 iMessage 스타일 후진 키보드 (0) | 2020.11.12 |
내 Node.js 앱의 REST API를 보호합니까? (0) | 2020.11.12 |
'nice'에 해당하는 Windows (0) | 2020.11.12 |