현재 작업 폴더 확인System.getProperty("user.dir") 을 통해 현재 작업 폴더 경로 값을 가져올 수 있다. 가져온 폴더 경로 값을 이용해 해당 폴더 내에 있는 파일과 폴더들을 배열로 반환할 수 있다. 💻 Java 예제 1📝 소스 코드
현재 작업 폴더 경로 값을 curWorkingDir 변수에 저장하였다. 해당 변수를 이용해 new File()을 하면 현재 작업 디렉터리 객체를 생성할 수 있다. listFiles() 메소드는 디렉터리 안에 있는 파일과 디렉터리들을 배열로 반환한다. 배열로 반환한 값을 File[] list에 저장하였다. getName()을 사용하면 현재 작업 폴더 내에 있는 디렉터리와 파일 이름들을 가져올 수 있다. length()는 파일의 크기(byte)를 반환한다. 디렉터리의 경우 length 값이 의미가 없다. 아래 실행 결과를 보면 현재 작업 폴더 밑에 temp 폴더가 있는 걸 확인할 수 있다. 따라서 new File("temp")로 상대 경로를 이용해 파일 객체를 생성해보았다. getAbsolutePath() 메소드를 이용해 파일 객체의 절대 경로를 가져올 수 있다. 📄 실행 결과경로 확인💻 Java 예제 2📝 소스 코드
📄 실행 결과앞서 File tempDir = new File("temp") 를 한 것처럼 dummy.txt 파일도 상대 경로를 이용해 파일 객체를 생성하였다. getName() 메소드를 통해 상대 경로 이름을 가져올 수 있다. exists() 메소드를 이용해 물리적으로 존재하는지의 여부를 알 수 있는데, Java 예제 1의 실행 결과에서 보듯이 현재 폴더 내에 dummy.txt 파일은 존재하지 않으므로 false가 반환된다. 자바 애플리케이션은 resource 디렉토리에 정적 파일을 저장합니다. 이 때 파일의 경로를 알기 위해서는 resource 디렉토리의 경로가 필요합니다. 이 때 resource 디렉토리의 경로를 가져오기 위해 ClassLoader를 활용합니다. 꼭 클래스 로더에 대한 지식이 필요하진 않습니다. 다만 궁금하신 분은 이 글을 읽어주세요! resource 디렉토리의 경로 가져오기resource의 디렉토리를 가져오기 위해 ClassLoader에 있는 getResource() 메소드를 사용합니다. public URL getResource(String name) 이 메소드는 주어진 이름을 가진 자원을 찾으려고 시도합니다. 먼저 리소스의 상위 클래스 로더에 위임합니다. 부모가 null 이면 가상 머신에 빌드된 클래스 로더의 경로를 검색합니다. 실패하면 메서드는 findResource(String) 를 호출 하여 리소스를 찾습니다. 입력으로 지정된 리소스 이름은 classpath에 대해 상대적이거나 절대적일 수 있습니다. 리소스를 읽기 위한 URL 개체를 반환하거나 리소스를 찾을 수 없거나 호출자가 리소스를 반환할 수 있는 적절한 권한이 없는 경우 null을 반환합니다. Java는 클래스 경로에서 리소스를 로드한다는 점에 유의하는 것이 중요합니다. 마지막으로 Java에서 리소스 로드 는 환경이 리소스를 찾도록 설정되어 있는 한 코드가 실행되는 위치가 중요하지 않기 때문에 위치가 독립적인 것으로 간주됩니다. 즉 Java 환경이 리소스를 찾도록 설정되어 있다면 어느 위치에서 실행하든 위치와 관계없이 실행됩니다. 따라서 resource의 디렉토리 경로를 가져오기 위해서는 다음과 같이 할 수 있습니다.
파일의 내용 읽기리소스의 경로를 알아냈다면 파일의 내용을 읽을 수 있습니다. URL resource = getClass().getClassLoader().getResource("리소스 이름") 로 리소스의 경로를 가져왔습니다. Path path = new File(resource.getPath()).toPath(); List<String> contents = Files.readAllLines(path); 이렇게 진행하시면 파일 안에있는 모든 라인을 읽습니다. 단 Files.readAllLines() 메서드 내부적으로 UTF-8 로 디코딩을 진행합니다. |