<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();
}
});
}
}
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 12/27 오후 기록 026-2 (1) | 2024.12.27 |
---|---|
자바 풀 스택 12/27 오전 기록 026-1 (1) | 2024.12.27 |
자바 풀 스택 12/26 오전 기록 025-1 (0) | 2024.12.26 |
자바 풀 스택 12/24 오후 기록 024-2 (0) | 2024.12.24 |
자바 풀 스택 12/24 오전 기록 024-1 (0) | 2024.12.24 |