티스토리 뷰

Language/JAVA

Java File다루기

KyeongRok Kim 2021. 11. 21. 17:21

 

 

파일 직접 읽기

.readString()

 

 

./(현재 디렉토리)의 파일 목록 출력

@Test
void fileList(){
    File dir = new File("./");
    File files[] = dir.listFiles();

    for (File file : files) {
        System.out.println(file);
    }
}

결과

./gradle
./gradlew
./build.gradle
./.gradle
./build
./gradlew.bat
./settings.gradle
./.idea
./src

 

파일 생성하기

./ 의 파일 목록을 보았으니 ./에 numbers.txt 파일을 생성 해보겠습니다.

@Test
void createANewFile() throws IOException {
    File file = new File("./numbers.txt");
    System.out.println("파일 생성 되었는지?:" + file.exists());
}

결과

파일 생성 되었는지?:false

 

결과는 false입니다. 이렇게만 하면 파일이 생성되지 않습니다.

file.createNewFile() 을 해줘야 생성 됩니다.

@Test
void createANewFile() throws IOException {
    File file = new File("./numbers.txt");
    file.createNewFile();
    System.out.println("파일 생성 되었는지?:" + file.exists());
}

결과

파일 생성 되었는지?:true

실제로 numbers.txt라는 파일이 생성 되었습니다.

 

 

 

Files로 파일이 존재하는지 확인 하기

@Test
void FilesExists() {
    boolean r = Files.exists(Paths.get("./numbers.txt"));
    System.out.println(r);
}

결과

true

 

BufferedReader로 파일 읽기

한줄씩 읽기

./numbers.txt 가 존재한다는 것을 알기 때문에 파일을 읽어 보겠습니다.

BufferedReader의 생성자의 두번째 파라메터는 버퍼의 크기 입니다. 지금은 16*1024이므로 16Kb입니다.

@Test
void bufferedReader() throws IOException {
    BufferedReader br = new BufferedReader(
        new FileReader("./numbers.txt"),
        16 * 1024
    );

    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}

결과

___empty___

 

결과는 아무것도 안나옵니다. numbers.txt에 값을 넣고 실행 해보겠습니다.

 

numbers.txt

1
2
3
4

결과

1
2
3
4

 

FileReader를 쓰는 방법

인코딩을 지정할 수 있습니다.

public List<String> getLines(String fileName) throws IOException {
    List<String> lines = new LinkedList<>();
    BufferedReader br = new BufferedReader(new FileReader(fileName, Charset.forName("EUC-KR")));

    String line;
    while ((line = br.readLine()) != null) {
        lines.add(line);
    }
    return lines;
}

 

Java8 스타일 File읽기

Files.newBufferedReader() 를 씁니다.

public class NewBufferedReader {
    public void read() {
        try(BufferedReader br = Files.newBufferedReader(
            Paths.get("afile.txt"),StandardCharsets.UTF_8)){

            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        NewBufferedReader newBufferedReader = new NewBufferedReader();
        newBufferedReader.read();
    }
}

 

 

한 바이트씩 읽기

public void bufferedReader(String filename) throws IOException {
        BufferedReader br = new BufferedReader(
                new FileReader(filename),
                16 * 1024
        );

        System.out.println((char)br.read());
        System.out.println((char)br.read());
        System.out.println((char)br.read());
        System.out.println((char)br.read());
}

 

결과

i
d

h

 

 

 

이제 파일을 읽어올 수 있게 되었습니다.

 

 

Files

Files는 File을 다룰 때 유용한 메소드를 제공 해줍니다.

 

.isDirectory(Path)

Java에서 테스트 코드를 작성 할 때 파일을 읽어와서 테스트코드를 만들고 싶을 때가 있습니다. 그런데 현재 디렉토리는 어디일까요? "./"는 어디일지 궁금 할 때 먼저 .isDirectory(Path) 를 써서 해당 path가 디렉토리인제 먼저 확인 해볼 수 있습니다.

@Test
void sum() throws IOException {
  System.out.println(Files.isDirectory(Paths.get("./")));
}

결과

true

 

현재 class의 절대 경로

@Test
void absolutePath(){
    System.out.printf("class의 절대경로: %s %n",this.getClass().getResource("").getPath());
}

결과

class의 절대경로: /Users/kyeongrok/git/java/toby_94_to/build/classes/java/test/dao/ 

 

 

end.

 

 

참고 

https://hianna.tistory.com/587

[Java] 텍스트 파일 읽기 ( FileReader, BufferedReader, Scanner, Files ) - 어제 오늘 내일 (tistory.com)

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함