| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 자바스크립트
- 노드
- oracle
- 영어
- 오라클
- db
- SAP ERP
- 도커
- sap mm
- Mac
- docker
- 유럽여행
- SAP
- Oracle DB
- ABAP
- 자바
- 딥러닝
- 비지니스영어
- 오라클 디비
- Java
- JavaScript
- Python
- IT
- node.js
- Spring Framework
- nodejs
- Programming
- SAP ABAP
- 머신러닝
- 파이썬
- Today
- Total
JIHYUN JEONG
[java] 엄마도 이해하는 자바 기본 6일차 (1) 본문
□ 복습시간
- Thread
: 프로세스 내의 개별적인 실행 흐름
: 프로세스는 프로그램 실행에 필요한 자원과 thread로 구성
: 모든 프로세스는 최소 하나 이상의 thread가 존재해야 실행 가능
- Thread 생성방법 1. Class
class Test extends Thread{}
Test t = new Thest();
t.start();
- Thread 생성방법 1. Runnable interface 구현
class Test2 implements Runnable{}
Test2 t2 = new Test();
Thread thread = new Thread(t2)
thread.start();
- Thread Synchronization
: 다수의 thread가 공유 데이터에 접근해서 작업할 경우 thread간의 간섭 현상이 발생
: 이를 방지하기 위해 thread간에 동기화(synchronization)를 시켜줌 → 일종의 l
- Vector 로 만들때는 이미 동기화 되어 있는 상태라 Thread가 동시에 되지 않음 (속도 면에서 약간 느림)
- ArrayList는 처음부터 lock 이 걸려 있지 않음, Thread가 동시에 됨
→ Vector보단 ArrayList를 사용하라
[ArrayList Synchronization ]
ArrayList <String> list = new ArrayList<String>( );
List.add( );
Synchronized(list) { };
□ Stream
: 일련의 데이터를 이동시키는 입출력 파이프 혹은 그 데이터
- 입출력 Stream
* 입력파이프 : 외부에서 데이터가 들어오는 파이프
* 출력파이프 : 프로그램에서 데이터가 나가는 파이트
※ Stream을 통해 이동이 될때 코드값이 이됭됨
- Stream 종류
구분 |
Stream 종류 |
입력용/출력용 |
InputStream OutputStream |
입출력 단위 (char [2byte] / byte [1byte] ) |
Character Stream Byte Stream |
데이터 입출력 방법 (직/간접) |
Node(Sink) Stream Process Stream |
* Node(Sink) Stream(일반 파이프) : 데이터를 소스에서 직접 읽거나 씀
* Process Stream(필터) : Node(Sink) Stream을 받아서 가공한 후 직접 쓰는 애한테 넘겨줌
(Ex. 욕실의 샤워기)
- Node(Sink) Stream
근원지/ |
Byte stream (1byte) |
Character stream (2byte) |
memory |
ByteArrayInputStream |
CharArrayReader |
file |
FileInputStream - 파일에 다가 출력 |
FileReader - 파일로 부터 입력 받는 FileWriter - 파일에 다가 출력 |
★ 한글을 사용할 때는 Character stream에 있는 것을 사용한
* memory로 부터 데이터를 입력/출력 하는 파이프
* file로 부터 입력/출력 하는 파이프
- Process Stream
처리 |
Byte stream (1byte) |
Character stream (2byte) |
버퍼링 |
BufferedInputStream |
BufferedReader |
자료변환 |
DataInputStream |
|
객체직렬화 |
ObjectInputStream |
|
* BufferedReader, BufferedWriter
=> 이걸 사용, 필터
※ 한글을 Byte Stream(1byte)을 사용하게 되면 한글은 깨짐 (한글은 2byte)
- Charater S -> ~Reader, ~Writer
* 한글을 쓸때는 Reader, Writer를 써야함
- Byte S -> ~InputStream, ~OutputStream
[ 파일 복사 예제 ]
package asianaidt.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileCopy {
public static void main(String[] args) {
FileInputStream fis; // 파일로부터 읽어 오는 스트림
FileOutputStream fos; // 파일로 출력하는 스트림
// FileCopy.java (기존에 있는거),args[0] Copy.java(새로 만들거), args[1]
try{
fis = new FileInputStream(args[0] );
fos = new FileOutputStream(args[1]);
for(int i; (i=fis.read()) !=-1; ) // fis.read는 글자의 코드값(2진수)을 읽어서 i 에 저장, 파일의 끝을 맞나면 -1이 리턴됨
fos.write(i); // 글자값의 코드를 받아서 코드의 해당하는 글자를 출력함, i를 글자의 코드로 인식해서 해당 글자를 출력해줌
fis.close(); // 출력 파일은 글자를 다 쓰면 꼭 닫아줘야 함
fis.close(); // 출력 파일은 글자를 다 쓰면 꼭 닫아줘야 함
System.out.println("file copied.....");
}catch(Exception e){}
}
}
[ 실습 예제 ]
package asianaidt.io;
import java.io.*;
class CharacterStreamTest{
public static void main(String[] args) throws IOException{
File tempfile = File.createTempFile("haha",".txt"); // 임시파일이라 실행할때 마다 파일명이 바뀜
System.out.println(tempfile);
// 10 ~ 17번 라인 : 파일에 내용 쓰기 --> 저장하기
FileWriter fw = new FileWriter(tempfile);
BufferedWriter bw = new BufferedWriter(fw);//필터 스트림, bw가 가공, 버퍼 크기 만큼 쓰는 필터(속도를 좀 더 빨리 하기 위해)
for(int i = 0;i 열기
FileReader fr = new FileReader(tempfile);
BufferedReader br = new BufferedReader(fr); //필터 스트림
for(String str; (str = br.readLine()) != null; ){ // readLine, 줄단위로 읽어냄 (BufferedReader가 소유)
System.out.println(str);
}
br.close(); // 필터를 끼어 놓은 경우에는 필터만 닫아줘도 됨
}
}
package asianaidt.io;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class CopyOfNotePad extends JFrame implements ActionListener {
JTextArea output;
JScrollPane scrollPane;
JMenuBar menuBar;
JMenu menu, secondMenu;
JMenuItem menuItem1, menuItem2,fnew,fopen,fsave,fsaveas,fexit; // 새글, 불러오기, 저장하기, 새이름으로, 끝내기
JRadioButtonMenuItem rbMenuItem1, rbMenuItem2;
JCheckBoxMenuItem cbMenuItem1, cbMenuItem2;
JFileChooser fc;
public CopyOfNotePad() {
fc = new JFileChooser();
//Create the menu bar.
menuBar = new JMenuBar();
//Build the first menu.
menu = new JMenu("A Menu");
menuBar.add(menu);
// Build the second menu
secondMenu = new JMenu("secondMenu");
menuBar.add(secondMenu);
//a group of JMenuItems
menuItem1 = new JMenuItem("menu item 1");
menu.add(menuItem1);
menuItem2 = new JMenuItem("menu item 2");
menu.add(menuItem2);
// fnew,fopen,fsave,fsaveas,fexit
// 새글, 불러오기, 저장하기, 새이름으로, 끝내기
// second of JMenuItem
fnew = new JMenuItem("새글");
secondMenu.add(fnew);
secondMenu.addSeparator(); // JMenuItem의 구분선
fopen = new JMenuItem("불러오기");
secondMenu.add(fopen);
fsave = new JMenuItem("저장하기");
secondMenu.add(fsave);
fsaveas = new JMenuItem("새이름으로");
secondMenu.add(fsaveas);
fexit = new JMenuItem("끝내기");
secondMenu.add(fexit);
fnew.addActionListener(this);
fopen.addActionListener(this);
fsave.addActionListener(this);
fsaveas.addActionListener(this);
fexit.addActionListener(this);
//a group of radio button menu items
menu.addSeparator(); // JMenuItem의 구분선
ButtonGroup group = new ButtonGroup(); //radio button 사용할때 필요
rbMenuItem1 = new JRadioButtonMenuItem("A radio button menu item 1");
rbMenuItem2 = new JRadioButtonMenuItem("A radio button menu item 2");
group.add(rbMenuItem1);
group.add(rbMenuItem2);
menu.add(rbMenuItem1);
menu.add(rbMenuItem2);
//a group of check box menu items
menu.addSeparator();
cbMenuItem1 = new JCheckBoxMenuItem("A checkbox menu item 1");
cbMenuItem2 = new JCheckBoxMenuItem("A checkbox menu item 2");
menu.add(cbMenuItem1);
menu.add(cbMenuItem2);
//secondMenu 생성
//JMenuItem 생성: 새글, 불러오기, 저장하기, 새이름으로, 끝내기
//JMenuItem에 Listener 등록하기, MenuItem에 감시자를 붙여두기
//secondMenu에 JMenuItem 붙이기
//menuBar에 secondMenu 붙이기
output = new JTextArea(5, 30);
scrollPane = new JScrollPane(output);
add(scrollPane, "Center");
setJMenuBar(menuBar);//****화면에 메뉴바 붙일 때 사용하는 메소드 : setJMenuBar()
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(550, 550);
setVisible(true);
}
public static void main(String[] args) {
CopyOfNotePad demo = new CopyOfNotePad();
}
@Override
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if(o == fnew){ //새글, 타이핑한 글자를 다 지워지게 하고
output.setText("");
}
else if(o == fopen){ //열기
//showOpenDialog(): 화면에 열기 창을 띄워 줌
int returnVal = fc.showOpenDialog(this);
output.setText("");
if (returnVal == JFileChooser.APPROVE_OPTION) { //열기버튼 클릭시
File file = fc.getSelectedFile(); // 선택한 파일 알아내기
FileReader fr;
try {
fr = new FileReader(file.getAbsolutePath());
BufferedReader br = new BufferedReader(fr);
for(String str; (str = br.readLine()) != null; ){ // readLine, 줄단위로 읽어냄 (BufferedReader가 소유)
output.append(str+"\n");
//System.out.println(str);
}
br.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
else if(o == fsave){ //저장하기
//showSaveDialog(): 화면에 저장 창을 띄워 줌
int returnVal2 = fc.showSaveDialog(this);
// output.setText("");
if (returnVal2 == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile(); // 저장하기 위해 입력한 파일명
FileWriter fw;
try {
fw = new FileWriter(file.getAbsolutePath());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(output.getText());
output.setText("");
bw.close();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
}else if(o == fsaveas){
}else{ //fexit
System.exit(0); // 0을 제외한 나머지는 모두다 비정상 종료임
}
}
}
package asianaidt.io;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class CopyOfNotePad extends JFrame implements ActionListener {
JTextArea output;
JScrollPane scrollPane;
JMenuBar menuBar;
JMenu menu, secondMenu;
JMenuItem menuItem1, menuItem2,fnew,fopen,fsave,fsaveas,fexit; // 새글, 불러오기, 저장하기, 새이름으로, 끝내기
JRadioButtonMenuItem rbMenuItem1, rbMenuItem2;
JCheckBoxMenuItem cbMenuItem1, cbMenuItem2;
JFileChooser fc;
public CopyOfNotePad() {
fc = new JFileChooser();
//Create the menu bar.
menuBar = new JMenuBar();
//Build the first menu.
menu = new JMenu("A Menu");
menuBar.add(menu);
// Build the second menu
secondMenu = new JMenu("secondMenu");
menuBar.add(secondMenu);
//a group of JMenuItems
menuItem1 = new JMenuItem("menu item 1");
menu.add(menuItem1);
menuItem2 = new JMenuItem("menu item 2");
menu.add(menuItem2);
// fnew,fopen,fsave,fsaveas,fexit
// 새글, 불러오기, 저장하기, 새이름으로, 끝내기
// second of JMenuItem
fnew = new JMenuItem("새글");
secondMenu.add(fnew);
secondMenu.addSeparator(); // JMenuItem의 구분선
fopen = new JMenuItem("불러오기");
secondMenu.add(fopen);
fsave = new JMenuItem("저장하기");
secondMenu.add(fsave);
fsaveas = new JMenuItem("새이름으로");
secondMenu.add(fsaveas);
fexit = new JMenuItem("끝내기");
secondMenu.add(fexit);
fnew.addActionListener(this);
fopen.addActionListener(this);
fsave.addActionListener(this);
fsaveas.addActionListener(this);
fexit.addActionListener(this);
//a group of radio button menu items
menu.addSeparator(); // JMenuItem의 구분선
ButtonGroup group = new ButtonGroup(); //radio button 사용할때 필요
rbMenuItem1 = new JRadioButtonMenuItem("A radio button menu item 1");
rbMenuItem2 = new JRadioButtonMenuItem("A radio button menu item 2");
group.add(rbMenuItem1);
group.add(rbMenuItem2);
menu.add(rbMenuItem1);
menu.add(rbMenuItem2);
//a group of check box menu items
menu.addSeparator();
cbMenuItem1 = new JCheckBoxMenuItem("A checkbox menu item 1");
cbMenuItem2 = new JCheckBoxMenuItem("A checkbox menu item 2");
menu.add(cbMenuItem1);
menu.add(cbMenuItem2);
//secondMenu 생성
//JMenuItem 생성: 새글, 불러오기, 저장하기, 새이름으로, 끝내기
//JMenuItem에 Listener 등록하기, MenuItem에 감시자를 붙여두기
//secondMenu에 JMenuItem 붙이기
//menuBar에 secondMenu 붙이기
output = new JTextArea(5, 30);
scrollPane = new JScrollPane(output);
add(scrollPane, "Center");
setJMenuBar(menuBar);//****화면에 메뉴바 붙일 때 사용하는 메소드 : setJMenuBar()
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(550, 550);
setVisible(true);
}
public static void main(String[] args) {
CopyOfNotePad demo = new CopyOfNotePad();
}
@Override
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if(o == fnew){ //새글, 타이핑한 글자를 다 지워지게 하고
output.setText("");
}
else if(o == fopen){ //열기
//showOpenDialog(): 화면에 열기 창을 띄워 줌
int returnVal = fc.showOpenDialog(this);
output.setText("");
if (returnVal == JFileChooser.APPROVE_OPTION) { //열기버튼 클릭시
File file = fc.getSelectedFile(); // 선택한 파일 알아내기
FileReader fr;
try {
fr = new FileReader(file.getAbsolutePath());
BufferedReader br = new BufferedReader(fr);
for(String str; (str = br.readLine()) != null; ){ // readLine, 줄단위로 읽어냄 (BufferedReader가 소유)
output.append(str+"\n");
//System.out.println(str);
}
br.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
else if(o == fsave){ //저장하기
//showSaveDialog(): 화면에 저장 창을 띄워 줌
int returnVal2 = fc.showSaveDialog(this);
// output.setText("");
if (returnVal2 == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile(); // 저장하기 위해 입력한 파일명
FileWriter fw;
try {
fw = new FileWriter(file.getAbsolutePath());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(output.getText());
output.setText("");
bw.close();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
}else if(o == fsaveas){
}else{ //fexit
System.exit(0); // 0을 제외한 나머지는 모두다 비정상 종료임
}
}
}
'Information Technology > Java' 카테고리의 다른 글
| [JAVA] 이클립스(Eclipse) + 오라클 11g(Oracle db) JDBC 연동하기 07 (0) | 2013.02.27 |
|---|---|
| [java] 엄마도 이해하는 자바 기본 6일차 (2) (0) | 2013.02.19 |
| [java] 엄마도 이해하는 자바 기본 5일차 (2) | 2013.02.18 |
| [java] 엄마도 이해하는 자바 기본 4일차 (0) | 2013.02.18 |
| [java] 엄마도 이해하는 자바 기본 3일차 (0) | 2013.02.18 |
Card.java