일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- nodejs
- 비지니스영어
- 파이썬
- 도커
- 자바
- IT
- 머신러닝
- Java
- Oracle DB
- ABAP
- 오라클 디비
- node.js
- 유럽여행
- Programming
- Spring Framework
- 노드
- SAP ERP
- Python
- 오라클
- docker
- sap mm
- 자바스크립트
- SAP
- 딥러닝
- JavaScript
- db
- oracle
- Mac
- 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 |