공부의 기록/자바 풀 스택 : 수업내용정리

자바 풀 스택 12/26 오후 기록 025-2

파티피플지선 2024. 12. 26. 18:21

<14:30 5교시>

바이트 알갱이는 문자를 나타낼 수도, 문서를 나타낼 수도, 사진을 나타낼 수도, 영상을 나타낼 수도 있다.

 

InputStream에 대하여

기본적으로 인풋스트림은 1바이트 처리로, 문자열을 다루긴 어렵다.

문자를 읽어들일때 InputStream, InputStreamReader, BufferedReader 를 사용한다

package test.main;

import java.io.IOException;
import java.io.InputStream;

/*
 * 입력,출력(input, output)
 * -어떤 대상으로부터 데이터를 메모리로 읽어들이는 것을 입력
 * -프로그래밍 언어의 관점에서 메모리라는 것은 변수나 필드나 객체로 생각하면 편함
 * -데이터는 2진수로 이루어졌지만 2진수 8개의 묶음인 1바이트 단위로 생각하면 편함
 * -1바이트는 총 256가지의 값을 표현 가능
 * -1바이트를 10진수로 환산하면 0~255 사이의 숫자 중 하나
 * - 입력과 출력을 통해서 이동하는 데이터는 byte(byte 알갱이) 하나하나가 이동한다고 생각하면 됨
 */
public class MainClass01 {
	public static void main(String[] args) {
		System.out.println("메인 메소드 시작합니다");
		//키보드와 연결된 InputStream 타입의 참조값을 kbd라는 지역변수에 담고
		//InputStream 객체는 1바이트 단위 처리 스트림이다.
		//영문자, 대소문자, 숫자, 특수문자만 처리할 수 있고
		//한글은 처리가 불가능하다.		
		InputStream kbd = System.in;
		
		try {
			//입력한 키의 코드 값 읽어오기
			int code=kbd.read();
			System.out.println("code:"+code);
			//code 값으 대응되는 문자 얻어내기
			char ch=(char)code;
			System.out.println("ch"+ch);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

package test.main;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class MainClass02 {
	public static void main(String[] args) {
		System.out.println("메인 메소드 시작");
		//1byte 처리 스트림
		InputStream kbd=System.in;
		
		//2byte 처리 스트림(65536가지를 표현 가능) 한글 처리 가능한 객체
		InputStreamReader isr = new InputStreamReader(kbd);
		//위에거를 var isr=InputStreamReader(kbd);라고 해도 됨
		System.out.println("입력: ");
		try {
			//InputStreamReader 객체로 입력한 문자의 코드 값 읽어내기
			int code=isr.read();
			System.out.println("code:"+code);
			char ch=(char)code;
			System.out.println("ch"+ch);
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
}
package test.main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class MainClass03 {
	public static void main(String[] args) {
		System.out.println("메인 메소드 시작");
		//1byte 처리 스트림
		InputStream kbd=System.in;
		//2byte 처리 스트림
		var isr=new InputStreamReader(kbd);
		//bufferedreader의 생성자로 inputstreamreader 객체를 전달해서 객체 생성
		var br =new BufferedReader(isr);
		System.out.println("입력:");
		try {
			String line=br.readLine();
			System.out.println("line:"+line);
		} catch (IOException ie) {
			ie.printStackTrace();
		}
	}
}

 

 

 

<15:30 6교시>

 

package test.main;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class MainClass05 {
	public static void main(String[] args) {
		//콘솔창에 출력할 수 있는 객체의 참조값 얻어내기
		PrintStream ps=System.out;
		//PrintStream 객체의 참조값을 부모 type 변수에 담기
		//OutputStream 도 1바이트 처리 스트림(한글 처리 불가)
		OutputStream os=ps;
		var osw=new OutputStreamWriter(os);
		try {
			osw.write(97);
			osw.write(98);
			osw.write(44032);//한글처리 가능
			osw.write("분수");
			osw.write("\r\n");
			osw.write("piano");
			osw.flush();//방출
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
}

 

package test.main;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class MainClass06 {
	public static void main(String[] args) {
		//콘솔창에 출력할 수 있는 객체의 참조값 얻어내기
		PrintStream ps=System.out;
		//PrintStream 객체의 참조값을 부모 type 변수에 담기
		//OutputStream 도 1바이트 처리 스트림(한글 처리 불가)
		OutputStream os=ps;
		var osw=new OutputStreamWriter(os);
		//OutputStreamWriter를 BufferedWriter의 생성자에 전달해서 객체 생성
		var bw=new BufferedWriter(osw);
		/*
		 * window의 개행기호:\r\n
		 * 리눅스, 맥의 개행기호 : \n
		 */
		try {
			bw.write("하나");
			bw.newLine();//운영체제에 맞는 개행 기호를 자동으로 출력해주는 메소드
			bw.write("두울");
			bw.newLine();
			bw.write("세엣");
			bw.flush();//방출
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
}

 

 

 

 

Input - InputStream / InputStreamReader/ BufferedReader

Output- OutputStream/OutputStreamWriter/BufferedWriter

각각 맨 앞에 애들은 한글자밖에 못 읽어들이고 /나머지 두번째, 세번째 네개는 문자열 처리하기도 좋음

 

 

따옴표와 역슬래시를 문자열에 출력하기 위한 방법 역슬래시 뒤에 놓는다.

 

java로 파일 만들기

 

 

package test.main;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class MainClass07 {
	public static void main(String[] args) {
		System.out.println("main() 메소드가 \"시작\"되었습니다");
		System.out.println("main() 메소드가 \\시작\\되었습니다");
		
		//MyFolder/memo.txt 파일에 저장할 문자열을 출력하기
		String msg="난 자바의 신이 될 것이다";
		//1. 메모 파일을 만들기
		//File f= new File("C:\\Users\\acorn\\Desktop\\playground\\MyFolder\\memo.txt");
		File f=new File("C:/Users/acorn/Desktop/playground/MyFolder/memo.txt");
		try {
			if(!f.exists()) {//만일 해당 파일이 존재하지 않으면
				f.createNewFile();//새로 만들어라
				System.out.println("memo.txt 파일을 만들었습니다");
			}
			//2. 문자열을 파일에 저장하기
			//new FileWriter(File 객체, append mode 여부)
			
			var fw= new FileWriter(f, true);
			fw.append(msg);
			fw.append("\r\n");//개행기호
			fw.flush();//실제출력
			fw.close();//마무리
			System.out.println("메모장 파일에 문자열을 기록했습니다.");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
}

 

 

<16:30 7교시>

더보기

1단계 프레임 만들기

package test.frame01;

import javax.swing.JFrame;

public class MemoFrame extends JFrame{
	//생성자
	public MemoFrame(String title) {
		super(title);
		
		
		
	}

	public static void main(String[] args) {
		var f=new MemoFrame("메모 프레임");
		f.setBounds(100,100,500,500);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

 

2단계 텍스트 입력 상자 만들기

package test.frame01;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MemoFrame extends JFrame{
	//생성자
	public MemoFrame(String title) {
		super(title);
		
		var topPanel=new JPanel();
		var inputMsg=new JTextField(30);
		var saveBtn=new JButton("Save");
		// 패널에 UI 두개 추가
		topPanel.add(inputMsg);
		topPanel.add(saveBtn);
		//프레임의 레이아웃 설정
		setLayout(new BorderLayout());
		//프레임의 북쪽에 패널 배치
		add(topPanel, BorderLayout.NORTH);
		
	}

	public static void main(String[] args) {
		var f=new MemoFrame("메모 프레임");
		f.setBounds(100,100,500,500);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

 

 

3단계 액션리스너를 프레임 자체가 구현하도록 implement 하고 메모장에 저장하기

package test.frame01;

import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MemoFrame extends JFrame{
	//생성자
	public MemoFrame(String title) {
		super(title);
		
		var topPanel=new JPanel();
		var inputMsg=new JTextField(30);
		var saveBtn=new JButton("Save");
		
		//페널에 UI 두개 추가
		topPanel.add(inputMsg);
		topPanel.add(saveBtn);
		//프레임의 레이아웃 설정
		setLayout(new BorderLayout());
		//프레임의 북쪽에 페널 배치
		add(topPanel, BorderLayout.NORTH);
		//저장 버튼에 리스너 함수 등록 
		saveBtn.addActionListener((event)->{
			//입력한 문자열 읽어오기
			String msg=inputMsg.getText();
			File f = new File("C:/Users/acorn/Desktop/playground/myFolder/memo.txt");
			
			try {
				//만일 해당 파일이 존재하지 않으면
				if(!f.exists()) {
					//새로 만들어라 
					f.createNewFile();
					System.out.println("memo.txt 파일을 만들었습니다.");
				}
				// new FileWriter(File 객체, append mode 여부 ) 
				var fw=new FileWriter(f, true);
				fw.append(msg);
				fw.append("\r\n"); //개행기호
				fw.flush(); //실제 출력
				fw.close(); //마무리
				System.out.println("memo.txt 파일에 문자열을 기록 했습니다");		
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		});
	}
	
	public static void main(String[] args) {
		var f=new MemoFrame("메모 프레임");
		f.setBounds(100, 100, 500, 500);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

 

 

 

package test.main;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/*
 * C:Users/acorn/Desktop/playground/MyFolder/memo.txt 파일에 저장된 문자열을 읽어와서
 * 콘솔창에 출력하는 예제
 */
public class MainClass08 {
	public static void main(String[] args) {
		File f=new File("C:/Users/acorn/Desktop/playground/MyFolder/memo.txt");
		
		try {
			//파일로부터 문자열을 읽어들일 수 있는 객체 생성
			var fr=new FileReader(f);
			//무한루프 돌면서
			while(true) {
				//문자의 코드값을 읽어들인다.
				int code= fr.read();
				//만일 더이상 읽을 게 없다면
				if(code==-1) {
					break;//반복문 탈출
				}
				//코드를 문자로 변환
				char ch=(char)code;
				//출력
				System.out.println(ch);
			}
		}catch(IOException ie){
			ie.printStackTrace()
		;}
			
		}
		
		
}
package test.main;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/*
 * C:Users/acorn/Desktop/playground/MyFolder/memo.txt 파일에 저장된 문자열을 읽어와서
 * 콘솔창에 출력하는 예제
 */
public class MainClass09 {
	public static void main(String[] args) {
		File f=new File("C:/Users/acorn/Desktop/playground/MyFolder/memo.txt");
		
		try {
			//파일로부터 문자열을 읽어들일 수 있는 객체 생성
			var fr=new FileReader(f);
			//문자열을 바로 읽어들일 수 있는
			var br= new BufferedReader(fr);
			//무한루프 돌면서
			while(true) {
				String line=br.readLine();
				//더이상 읽어올 문자열이 없으면 반복문 탈출
				//만일 더이상 읽을 게 없다면
				if(line==null) {
					break;
				}
				//읽어낸 문자열을 한줄씩 콘솔창에 출력
				System.out.println(line);
			}
		}catch(IOException ie){
			ie.printStackTrace()
		;}
			
		}
		
		
}

 

package test.main;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/*
 * C:Users/acorn/Desktop/playground/MyFolder/memo.txt 파일에 저장된 문자열을 읽어와서
 * 콘솔창에 출력하는 예제
 */
public class MainClass10 {
	public static void main(String[] args) {
		
		//문자열을 누적 시킨다음 한번에 누적된 문자열을 얻어낼 수 있는 객체 생성
		var sb= new StringBuilder();
		File f=new File("C:/Users/acorn/Desktop/playground/MyFolder/memo.txt");
		
		try {
			//파일로부터 문자열을 읽어들일 수 있는 객체 생성
			var fr=new FileReader(f);
			//무한루프 돌면서
			var br= new BufferedReader(fr);
			//무한루프 돌면서
			while(true) {
				String line=br.readLine();
				//더이상 읽어올 문자열이 없으면 반복문 탈출
				//만일 더이상 읽을 게 없다면
				if(line==null) {
					break;
				}
				//읽어낸 문자열을 Stringbuilder 객체에 누적시키
				sb.append(line);
				sb.append("\r\n");//개행기호
			}
		}catch(IOException ie){
			ie.printStackTrace()
		;}
		//StringBuilder 객체에 누적된 문자열을 한번에 출력하기
		String result=sb.toString();
		System.out.println(result);
		}
		
		
}

 

 

<17:30 8교시> 

혼자 삽질한거(로드를 눌러서 메모장에 저장된 것을 불러오기)

더보기
package test.frame01;

import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;


public class MemoFrame2 extends JFrame{
	//생성자
	
	
	public MemoFrame2(String title) {
		super(title);
		var topPanel=new JPanel();
		var loadBtn=new JButton("load");
		var ta= new JTextArea();
		
		topPanel.add(loadBtn);
		setLayout(new BorderLayout());
		add(topPanel, BorderLayout.NORTH);
	
	}
	
	public static void main(String[] args) {
		var frame=new MemoFrame2("메모 프레임2");
		frame.setBounds(100, 100, 500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		File f = new File("C:/Users/acorn/Desktop/playground/myFolder/memo.txt");
		var sb=new StringBuilder();
		
		try {
			var fr=new FileReader(f);
			var br=new BufferedReader(fr);
			while(true) {
				String line=br.readLine();
				if(line==null) {
					break;
				}
				sb.append(line);
				sb.append("\r\n");
				
			}
			ta.setText(sb.toString());
		} catch (IOException ie) {
			ie.printStackTrace();
		}
		
		});
	}
	
		
}