1. 타겟이란? (+FileReader / FileWriter)
버퍼가 처리할 데이터는 일종의 타겟(Target)이 될 수 있다.
"데이터는 버퍼에 저장되어 있고, 해당 데이터는 타겟으로 전송되어 처리되어야 한다" 즉, 데이터가 바이트 스트림으로 흘러가는 과정에서 타겟은 이 데이터를 읽어들이거나 처리하는 (받아들여 처리하는 주체) 역할을 수행 바이트 스트림을 통해 데이터는 타겟으로 전송되고, 타겟은 해당 데이터를 받아들여 처리한다. 타겟은 데이터를 사용하거나 소비하는 역할을 수행하는 객체나 메소드를 가리킨다. 예를 들어, 파일에 데이터를 쓰는 작업을 수행하는 객체는 "타겟"이 될 수 있다. 다른 부분에서 이 객체를 호출하면, 데이터를 전달하고 이 객체는 전달받은 데이터를 파일에 쓰게 된다. 이렇게 데이터를 받아들여 처리하는 주체로서의 역할을 수행하는 것이 "타겟"
bw 객체를 호출하면, write 메소드가 "안녕" 이라는 데이터를 매개 변수로 전달하고, bw 객체는 전달받은 데이터를 파일 'input.txt' 인 듯? 에 쓰게 된다. 이렇게 데이터를 '사용' 하거나 '소비'를 하기 때문에 BufferedWriter 객체가 바로 '타겟'
[ new FileWriter ] (FileReader도 있음)
FileWriter는 자바에서 파일에 텍스트를 쓰기 위한 클래스 중 하나 FileWriter 객체를 생성하면 해당 파일에 데이터를 쓸 수 있다. (input.txt 파일을 생성하고, 그 안에 '안녕', '반가워' 라는 텍스트를 쓴다는 말인듯?) 생성자에는 파일의 경로나 파일 객체를 전달할 수 있으며, 여기서는 "input.txt"라는 파일에 데이터를 쓰기 위해 파일 경로를 문자열로 전달하였다. 파일이 존재하지 않는 경우에는 FileWriter가 새로운 파일을 생성하며, 파일이 이미 존재하는 경우에는 기존 파일에 데이터를 덮어쓴다. 만약 파일을 생성하거나 데이터를 추가로 쓰고 싶다면 다른 생성자를 사용해야 한다. FileWriter 객체는 BufferedWriter 객체를 생성하기 위해 BufferedWriter의 생성자로 전달된다. 즉, BufferedWriter는 FileWriter를 감싸는 보조 스트림 역할을 한다.
* FileWriter는 파일에 문자 데이터를 쓰기 위한 클래스.
* new FileWriter("파일경로")는 파일 경로를 인자로 받아 해당 경로에
새로운 파일을 생성하고, 데이터를 쓰기 위한 FileWriter 객체를 생성한다는 뜻
버퍼를 달려면 타겟이 필요한데, 타겟은 파일, 모니터 등 다양한게 될 수 있다.
1번 예시가 바로 BufferedWriter bw = new BufferedWriter(new FileWriter("input.txt"));
+)
OS가 InputStreamReader로 A와 B를 읽으면 010000010100000 이 65, 66로 읽어짐 (8자씩 끊어읽는다. 8비트니까) 하드웨어에는 2진수 상태로 들어오는 것 InputStream은 buffer까진 못하니까 BufferStreamReader를 다는 것 이때, 버퍼는 '타겟'을 다는게 중요하다!
System.in 을 하면 키보드에서 입력받을 수 있다.
2. out 폴더
out 폴더는 주로 소스 코드 컴파일 후 생성되는 결과물을 저장하는 디렉토리 개발 프로젝트에서 소스 코드를 컴파일하면 컴파일러나 빌드 도구에 의해 자동으로 out 폴더가 생성되고, 컴파일된 바이트 코드나 실행 파일 등이 해당 폴더에 저장된다. out폴더는 주로 빌드 프로세스의 결과물을 담는 임시 폴더로 사용됩니다. 컴파일된 파일들은 이곳에 저장되어 실행 가능한 형태로 사용된다.
JAVA에선 out폴더, C#에선 bin폴더
3. 절대경로 / 상대경로
자바에서 파일을 읽거나 쓸 때, 절대경로나 상대경로를 사용할 수 있다. 파일 경로를 지정할 때에는 파일 시스템에 따라 경로 구분자를 사용해야 한다. 예를 들어, 윈도우에서는 역슬래시(\)를 사용하고, 리눅스나 맥에서는 슬래시(/)를 사용한다. 절대경로와 상대경로는 파일이나 폴더의 위치를 정확하게 지정하는 데 사용되며, 프로그램에서 파일 조작이나 파일에 접근할 때 유용하게 활용할 수 있습니다.
3-1. 절대경로란?
* 루트(최상위)에서부터 경로를 찾는 것. 그렇기에 내가 있는 위치 (현재 실행이 되고 있는 위치)는 상관 없음 절대경로는 파일이나 폴더의 전체 경로를 나타내며, 파일 시스템의 루트 디렉토리부터 출발하여 해당 파일이나 폴더까지의 경로를 표시한다. "C:\Users\Username\Documents\file.txt"와 같이 표현 됨. 절대경로는 어떤 위치에서든 파일이나 폴더를 찾을 수 있다.
3-2. 상대경로란?
* 실행되는 위치(프로젝트 폴더)를 기반으로 경로 정하는 것 상대경로는 현재 작업 디렉토리를 기준으로 파일이나 폴더의 위치를 나타낸다. 현재 작업 디렉토리는 실행 중인 프로그램이나 스크립트가 실행되는 위치를 말한다. 상대경로는 "./folder/file.txt"와 같이 표현될 수 있으며, 현재 위치에서 상위 디렉토리를 나타내는 ".."을 사용할 수도 있다.
상대경로가 실행되는 위치는 툴마다 다르다.
[ ./ ] <<이거!! 꼭!! 꼭 이렇게 쓰는 습관을 기르자
인텔리J에서 현재 위치 확인
즉, 실행경로가 study(기준점)라는 말. 이 폴더 내에서 하위폴더들을 실행함 D:\workspace\java_lec\study2 이 경로!
3-3. 경로를 찾을 때 주의할 점 (+이스케이프 문자)
3-4. 절대경로, 상대경로 예시
[ 완료 코드 ]
package ex15; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; // 상대 경로 : 실행되는 위치(프로젝트폴더) 기반으로 경로 정하는 것 // 절대 경로 : 루트에서 부터 경로를 찾는것 // 윈도우 : C:\\workspace\\hello.txt // 맥,리눅스 : /workspace/hello.txt public class StreamEx05 { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("D:\\workspace\\java_lec\\study\\src\\ex15\\hello.txt")); //절대경로 BufferedReader br = new BufferedReader(new FileReader("src\\ex15\\hello.txt")); //상대경로 String line = br.readLine(); System.out.println(line); BufferedWriter bw = new BufferedWriter(new FileWriter("input.txt")); bw.write("안녕"); bw.write("반가워\n"); bw.flush(); } catch (Exception e) { e.printStackTrace(); } } }
BufferedReader br = new BufferedReader(new FileReader("src\\ex15\\hello.txt")); (new FileReader("src\\ex15\\hello.txt")); < 이게 바로 타겟. 타겟 설정이 어려운 것 BufferedReader br = new BufferedReader(new FileReader("D:\\workspace\\java_lec\\study2\\out\\production\\study2\\ex15\\hello.txt")); (new FileReader"D:\\workspace\\java_lec\\study\\src\\ex15\\hello.txt")); < 이게 바로 타겟
[절대 경로에서 찾기 ]
BufferedReader br = new BufferedReader(new FileReader("D:\\workspace\\java_lec\\study\\out\\production\\study\\ex15\\hello.txt"));
// 해당 코드를 아래와 같이 줄인다.
package ex15; import java.io.BufferedReader; import java.io.FileReader; // 상대 경로 : 내 파일(.class)에 위치를 기반으로 경로 정하는 것 // 절대 경로 : 루트에서 부터 경로를 찾는것 // 윈도우 : C:\workspace\hello.txt // 맥,리눅스 : /workspace/hello.txt public class StreamEx05 { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("D:\\workspace\\java_lec\\study\\src\\ex15\\hello.txt")); String line = br.readLine(); System.out.println(line); } catch (Exception e) { e.printStackTrace(); } } }
production
: 절대경로4. 다른 파일로 복사하는 기능
[ 전체 코드 및 설명 ] → 이해 안됨 [ 예제 오래되어서 x ]
파일에서 한 줄씩 읽어와서 다른 파일로 복사하는 기능을 수행하는 예제. 주로 텍스트 파일을 복사하는 용도로 사용될 수 있다.
package ex15; import java.io.*; public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("input.txt")); //FileReader에 BufferedReader를 연결 outputStream = new PrintWriter(new FileWriter("output.txt")); //FileWriter의 출력이 PrintWriter의 입력이 된다 String l; while ((l = inputStream.readLine()) != null) { outputStream.println(l); } //한 줄 단위로 입출력할 수 있다 } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } }
FileReader
클래스는 파일에서 문자 데이터를 읽기 위해 사용되는 클래스PrintWriter
클래스는 다양한 데이터 유형을 문자열로 변환하여
파일 또는 출력 스트림에 출력하는 데 사용되는 클래스Share article