728x90
반응형

특정 경로의 파일, 특정된 파일명으로 파일 찾아오는 방법

특정 경로의 파일을 가져와서 읽어야하는 플젝을 한 적이 있어 그 방법을 공유하고자 작성함

 

내 경우 폴더 경로를 찾는데 좀 복잡한 조건이 있었음

/Users 폴더 안에 하위로 이름이 다 다른 폴더들이 있고, 그 폴더가 몇개가 될지는 모르지만 최하위 폴더로 Downloads/sample 폴더가 존재하는 폴더를 찾아서 그 안의 sample1.txt, sample2.txt만 찾아서 읽어야 했음

내가 읽어야 하는 정보는 아래의 사진과 같이 /Users 폴더안에 있는 /Downloads/sample/sample1.txt, sample2.txt 이 두 파일이였음

 


해당 경로의 파일 찾아서 읽기

나는 Downloads/sample을 찾을 때 재귀함수를 통해서 계속해서 파일이 있는지 확인하는 방법으로 찾았음

디렉토리가 존재하는지 확인 후 그 경로에서 sample1.txt와 sample2.txt를 찾아서 파일을 읽고 필요한 정보를 sampleList에 담아 보냄

 

예제

public List<SampleDto> getCertificateFile() throws Exception {
    List<SampleDto> sampleList = new ArrayList<>();
    String strDirPath = "/Users";
    File usersDir = new File(strDirPath);
    File[] userDirs = usersDir.listFiles();

    if (userDirs != null) {
        for (File userDir : userDirs) {
            if (userDir.isDirectory()) {
                File sampleDir = new File(userDir, "Downloads/smple");
                if (sampleDir.exists() && sampleDir.isDirectory()) {
                    List<SampleDto> sampleInDir = listFilesWithExtensions(sampleDir);
                    sampleList.addAll(sampleInDir);
                }
            }
        }
    }
    return sampleList;
}

private List<SampleDto> listFilesWithExtensions(File path) {
    List<SampleDto> sampleList = new ArrayList<>();
    File[] fList = path.listFiles();

    if (fList == null) {
        return sampleList;
    }

    for (File file : fList) {
        if (file.isFile()) {
            String fileName = file.getName();
            if (fileName.equals("sample1.txt") || fileName.equals("sample2.txt")) {
                System.out.println("파일명: " + fileName + ", 파일 경로: " + file.getAbsolutePath());
                // 파일 읽고 처리하는 부분
                // 필요한 정보를 읽고 sampleList에 담기
            }
        } else if (file.isDirectory()) {
            List<SampleDto> sampleInDir = listFilesWithExtensions(file);
            sampleList.addAll(sampleInDir);
        }
    }

    return sampleList;
}
반응형
복사했습니다!