[SPRING] 클래스 패스에서 파일 읽기
SPRING클래스 패스에서 파일 읽기
여기에 내가하고 싶은 일이 있습니다. 구현에 도움이 될 Spring 클래스가 있는지 궁금합니다. 나는이 특별한 문제에 대해 봄을 사용할 필요가 없다. 나는 다른 모든 것을 구현하고있다.
내 DAO 계층에서 파일 당 1 SQL을 일컬어 내 SQL 파일을 외부화하고 싶습니다. 나는 봄 콩 싱글 톤 (singleton)처럼 SQL 문장을 읽고 캐시하고 싶다. 하지만 내 초기 투쟁에서 클래스 패스에 SQL 파일을로드하는 중 문제가 발생했습니다 ...
봄에 도움이 될만한 것이 있습니까? 나는 문서를 훑어 보았지만 나에게 뛰어 오르는 것은 아무것도 없었다.
여기에 내가 쓴 것의 종류가 있습니다. 그러나 파일이나 클래스 패스를 인식 할 수 없습니다. 실제로 applicationContext에 뭔가를 정의해야합니까?
다음은 작동하지 않는 두 가지 시도입니다. spring'ish와 java'ish 둘 다.
reader = new BufferedReader(new InputStreamReader(new ClassPathResource("com.company.app.dao.sql.SqlQueryFile.sql").getInputStream())
reader = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream("com.company.app.dao.sql.SqlQueryFile.sql")));
이견있는 사람?
해결법
-
==============================
1.Spring이 의존성 주입 프레임 워크로 사용된다고 가정 할 때, Spring이 그것을 삽입하도록 시도하십시오.
Spring이 의존성 주입 프레임 워크로 사용된다고 가정 할 때, Spring이 그것을 삽입하도록 시도하십시오.
수업 시간에 다음과 같이하십시오.
public void setSqlResource(Resource sqlResource) { this.sqlResource = sqlResource; }
그리고 당신의 애플리케이션 컨텍스트 파일에서, bean 정의에서, 단지 속성을 설정하십시오 :
<bean id="someBean" class="..."> <property name="sqlResource" value="classpath:com/somecompany/sql/sql.txt" /> </bean>
그리고 Spring은 classpath에서 파일을로드하고 리소스로 빈에 제공 할만큼 충분히 영리해야합니다.
PropertyPlaceholderConfigurer를 살펴보고 모든 SQL을 특성 파일에 저장하고 필요할 때마다 각각을 별도로 주입 할 수 있습니다. 다양한 옵션이 있습니다.
-
==============================
2.변경하십시오. to /를 경로 분리 자로 사용하고 getResourceAsStream을 사용하십시오.
변경하십시오. to /를 경로 분리 자로 사용하고 getResourceAsStream을 사용하십시오.
reader = new BufferedReader(new InputStreamReader( getClass().getClassLoader().getResourceAsStream( "com/company/app/dao/sql/SqlQueryFile.sql")));
또는
reader = new BufferedReader(new InputStreamReader( getClass().getResourceAsStream( "/com/company/app/dao/sql/SqlQueryFile.sql")));
Class.getResourceAsStream () vs ClassLoader.getResourceAsStream을 사용할 때 선행 슬래시에 유의하십시오. getSystemResourceAsStream은 사용자가 원하지 않는 시스템 클래스 로더를 사용합니다.
나는 도트 대신에 슬래시를 사용하는 것이 ClassPathResource에서도 작동 할 것이라고 생각한다.
-
==============================
3.
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class readFile { /** * feel free to make any modification I have have been here so I feel you * * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { File dir = new File(".");// read file from same directory as source // if (dir.isDirectory()) { File[] files = dir.listFiles(); for (File file : files) { // if you wanna read file name with txt files if (file.getName().contains("txt")) { System.out.println(file.getName()); } // if you want to open text file and read each line then if (file.getName().contains("txt")) { try { // FileReader reads text files in the default encoding. FileReader fileReader = new FileReader( file.getAbsolutePath()); // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader = new BufferedReader( fileReader); String line; // get file details and get info you need. while ((line = bufferedReader.readLine()) != null) { System.out.println(line); // here you can say... // System.out.println(line.substring(0, 10)); this // prints from 0 to 10 indext } } catch (FileNotFoundException ex) { System.out.println("Unable to open file '" + file.getName() + "'"); } catch (IOException ex) { System.out.println("Error reading file '" + file.getName() + "'"); // Or we could just do this: ex.printStackTrace(); } } } } }`enter code here` }
from https://stackoverflow.com/questions/734671/read-file-in-classpath by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] javax.inject.Named annotation은 무엇을 위해 사용되어야 하는가? (0) | 2019.01.09 |
---|---|
[SPRING] DispatcherServlet, Resolver 및 Controllers는 어떻게 상호 작용합니까? (0) | 2019.01.09 |
[SPRING] Spring MVC의 "redirect :"접두사는 항상 http로 리다이렉트됩니다 - https에 머물게하려면 어떻게해야합니까? (0) | 2019.01.09 |
[SPRING] @Autowired - 종속성을 위해 발견 된 유형의 한정 콩 (0) | 2019.01.09 |
[SPRING] Spring 부트와 Tomcat으로 .keystore 파일을 어떻게 지정합니까? (0) | 2019.01.09 |