language/java
자바 파일경로 읽기
datajoy
2020. 6. 14. 21:15
상대/절대경로
절대경로 : 해당 파일의 full 경로 (ex) c:\tomcat\webapp\static\test.txt)
상대경로 : 상대적인 기준의 경로 (ex) ./test.txt)
Context Root 경로
- src\main\webapp.
- 브라우저에서 접근가능.
- 브라우저에서 접근이 가능하기때문에 css파일 이나, jquery, img 파일들이 위치해있음.
WEB-INF(web information) 경로
- 브라우저에서 WEB-INF 접근 불가.
- jsp파일이나 공개되면 안되는 conf파일 경우 WEB-INF에 두어 직접접근 불가하게 함.
ClassLoader 경로
- 아래의 모든 경로
- /src/main/java
- /src/main/resources
- /src/test/java
- /src/test/resources
Context Root 상대경로 파일읽기
HttpServletRequest req;
//Context Root
String path = req.getSession().getServletContext().getRealPath("/"));
//WEB-INF
String path = req.getSession().getServletContext().getRealPath("/WEF-INF"));
ClassLoader 상대경로 파일읽기
// 경로에 '/' 붙지 않은경우, 클래스가 위치한 패키지 내에 파읽 읽음.
1) InputStream in = this.getClass().getResourceAsStream("test.txt");
// 경로에 '/' 붙은 경우, ClassLoader의 모든 경로에서 파일 읽음. 보통 src/main/resources 폴더의 파일 읽을때 사용.
2) InputStream in = this.getClass().getResourceAsStream("/test.txt");
// 경로에 '/' 붙지않음. ClassLoader의 모든 경로에서 파일 읽음. 보통 src/main/resources 폴더의 파일 읽을때 사용.
3) InputStream in = this.getClass().getClassLoader().getResourceAsStream("test.txt");
4) ClassLoader의 Class내에 파일존재하는 경우
- InputStream in = this.getClass().getResourceAsStream("/com/test/controller/test.txt"); // 경로에 '/' 붙은 경우, ClassLoader의 모든 경로에서 파일 읽음.
- InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/test/controller/test.txt"); // 경로에 '/' 붙지않음. ClassLoader의 모든 경로에서 파일 읽음.
Resources 상대경로 파일읽기
// src/main/resources 경로의 파일읽기
Reader reader = Resources.getResourceAsReader("config_properties.properties");
getRealPath("text.txt")
- 물리경로를 읽어옴.
- C:/eclipse-workspace/npms/target/classes/test.txt
getResource("text.txt")
- url로 경로를 읽어옴.
- URL url = getResource("text.txt")
- 출력 : file:/C:/eclipse-workspace/npms/target/classes/test.txt
- 파일 읽어서 출력하기.
// file url 경로 읽기
URL url = this.getClass().getClassLoader().getResource("test.txt");
File file = new File(url.toURI());
// file byte로 읽기
FileInputStream fileIn = new FileInputStream(file);
// byte에서 char로 변형
InputStreamReader fileReader = new InputStreamReader(fileIn);
// char에서 String로 변형
BufferedReader fileBuff = new BufferedReader(fileReader);
//출력
System.out.println(fileBuff.readLine());
getResourceAsStream("text.txt")
- InputStream으로 해당파일의 내용을 byte 형태로 읽어옴.
- InputStream in = getResourceAsStream("text.txt")
- 파일 읽어서 출력하기
// file byte 읽기
InputStream in = this.getClass().getClassLoader().getResourceAsStream("test.txt");
// byte에서 char 변형
InputStreamReader reader = new InputStreamReader(in);
// char에서 string 변형
BufferedReader buff = new BufferedReader(reader);