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);