PrintWriter와 FileWriter??
릴리즈 버젼으로 빌드한 앱은 디버깅하기 굉장히 까다롭습니다. 물론 실 기기와 연동되면 로그캣이나 여러 툴을 사용해 디버깅이 가능하지만, 고객사가 굉장히 다양한 현재 회사 특성상 이상현상 하나때문에 매번 부산, 전라도부터 전국적인 지역을 출장갈 수는 없고, 폐쇄적인 네트워크 환경상 사무실에서는 로그인도 안됩니다.
그래서 앱을 테스트할 때는 VM(ex : Nox, LDplayer)등으로 사용하는데, 이때는 로그파일에 스택트레이스등을 남겨 테스트하곤 합니다.
PrintWriter 클래스는 뭘까?
PrintWriter 클래스는 PrintStream이라는 클래스의 기능을 구현한 Writer 클래스의 확장 클래스로, 기존 Stream처럼 글자마다 flush하는 것이 아니라, printf(),println()등 PrintStream메서드가 호출될때마다 flush되어 기록되며, Stream 방식으로 구현되는 것이 아니기때문에 출력 메서드를 사용할 때 byte가 아닌 String값을 통해 기록한다.
개인적으로 해당 값에 따라 String 값을 byte로 바꾸어 넣어야하는 번거로움과 해당 코드를 줄일 수 있을 뿐 아니라, String 값을 직접 입력하기에 소스를 처음 보는 상황이 생겨도 비교적 직관성을 향상시킨다고 생각한다.
FileWriter 클래스란?
문자 파일 작성을 위한 편의 클래스로, FileOutputStream 클래스와 OutputStreamWriter클래스의 기능을 간소화 시킨 것이다.
생성자로는 File 객체가 인자값으로 필요하며, 파일명의 문자열값(String fileName)이 들어가도 되기에 편한대로사용하면 되겠다.
두 클래스를 같이 사용하는 이유는?
해당 목표는 apk를 디버깅할 때 txt파일에 로그를 남겨 비교적 편리한 디버깅을 하는것이다.
또한 PrintWriter생성자에 FileWriter를 인자로 넣음으로서 파일을 지정하고 쓰기작업을 하는데 굉장히 간편하게 할 수 있다.
공식 문서에 보면 PrintWriter생성자에 Writer 객체와 자동 플러시의 여부를 지정하여 File에 자동으로 PrintStream의 메서드를 사용할 시 해당 문자열 값을 지정한 파일에 기록할 수 있다.
위 사진에 나오는 메서드들이 PrintWriter에 구현되어있는 print메서드들이다.
예시 코드는 아래와 같다.
public class FileLogTest{
public static void main(String[] args) {
private PrintWriter writer;
try {
writer = new PrintWriter(new FileWriter(fileName, true), true);
writer.println("아");
writer.printf("%s 하자\\n","야근");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
광범위 하게 사용한다면 try-catch를 해당 로직에 감싸서 편하게 writer.println(String message)등의 방식으로 입력하면 된다. 하지만 정말 제한적인 환경에서 도저히 사용할 방법이 없을때 하는 로깅방법이라 크게 자세히 다루진않고, 다른 예제나 기능과 관련하여 나오게 되면 조금 더 딥하게 알아보고싶다.
PrintWriter와 FileWriter??
릴리즈 버젼으로 빌드한 앱은 디버깅하기 굉장히 까다롭습니다. 물론 실 기기와 연동되면 로그캣이나 여러 툴을 사용해 디버깅이 가능하지만, 고객사가 굉장히 다양한 현재 회사 특성상 이상현상 하나때문에 매번 부산, 전라도부터 전국적인 지역을 출장갈 수는 없고, 폐쇄적인 네트워크 환경상 사무실에서는 로그인도 안됩니다.
그래서 앱을 테스트할 때는 VM(ex : Nox, LDplayer)등으로 사용하는데, 이때는 로그파일에 스택트레이스등을 남겨 테스트하곤 합니다.
PrintWriter 클래스는 뭘까?
PrintWriter 클래스는 PrintStream이라는 클래스의 기능을 구현한 Writer 클래스의 확장 클래스로, 기존 Stream처럼 글자마다 flush하는 것이 아니라, printf(),println()등 PrintStream메서드가 호출될때마다 flush되어 기록되며, Stream 방식으로 구현되는 것이 아니기때문에 출력 메서드를 사용할 때 byte가 아닌 String값을 통해 기록한다.
개인적으로 해당 값에 따라 String 값을 byte로 바꾸어 넣어야하는 번거로움과 해당 코드를 줄일 수 있을 뿐 아니라, String 값을 직접 입력하기에 소스를 처음 보는 상황이 생겨도 비교적 직관성을 향상시킨다고 생각한다.
FileWriter 클래스란?
문자 파일 작성을 위한 편의 클래스로, FileOutputStream 클래스와 OutputStreamWriter클래스의 기능을 간소화 시킨 것이다.
생성자로는 File 객체가 인자값으로 필요하며, 파일명의 문자열값(String fileName)이 들어가도 되기에 편한대로사용하면 되겠다.
두 클래스를 같이 사용하는 이유는?
해당 목표는 apk를 디버깅할 때 txt파일에 로그를 남겨 비교적 편리한 디버깅을 하는것이다.
또한 PrintWriter생성자에 FileWriter를 인자로 넣음으로서 파일을 지정하고 쓰기작업을 하는데 굉장히 간편하게 할 수 있다.
공식 문서에 보면 PrintWriter생성자에 Writer 객체와 자동 플러시의 여부를 지정하여 File에 자동으로 PrintStream의 메서드를 사용할 시 해당 문자열 값을 지정한 파일에 기록할 수 있다.
위 사진에 나오는 메서드들이 PrintWriter에 구현되어있는 print메서드들이다.
예시 코드는 아래와 같다.
public class FileLogTest{
public static void main(String[] args) {
private PrintWriter writer;
try {
writer = new PrintWriter(new FileWriter(fileName, true), true);
writer.println("아");
writer.printf("%s 하자\\n","야근");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
광범위 하게 사용한다면 try-catch를 해당 로직에 감싸서 편하게 writer.println(String message)등의 방식으로 입력하면 된다. 하지만 정말 제한적인 환경에서 도저히 사용할 방법이 없을때 하는 로깅방법이라 크게 자세히 다루진않고, 다른 예제나 기능과 관련하여 나오게 되면 조금 더 딥하게 알아보고싶다.
'JAVA' 카테고리의 다른 글
JAVA - Stream이란? (0) | 2024.06.30 |
---|---|
JAVA Timer 클래스에 대하여 (0) | 2024.06.28 |
[Spring boot]IntelliJ 외장 톰캣에 배포하고 실행하기 (0) | 2023.08.16 |
[Spring] Spring boot 프로젝트 생성 방법 (0) | 2023.07.14 |
[JAVA] NetworkOnMainThreadException 해결 (0) | 2023.07.12 |