문자저장기


선생님이한 등록 저장기

메뉴바를 달고, 메뉴를 달고, 아이템을 달아야한다!!!!

 


flush







문자저장기
public class MAIN {

       public static void main(String[] args) {
             // TODO Auto-generated method stub

             new GUI();
            
      }

}

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


public class MANAGER {

      FileOutputStream fos =null ;
      FileWriter fw = null;
      
       // File(): 숫자를 파일을 만들거나 연결시켜준다. 파일을 생성한다.  //FileWriter(); 문자열을 파일로 저장한다.
      
       public void writeMessage(String dir, String contents){    // 디렉토리랑 내용을 가져오면, 해당 디렉토리에 해당 파일명에 내용을 넣을것이다.

                   try {
                         contents=contents .replaceAll("\n", "\r\n");  // .replaceAll: 특정 문자열을 찾기&바꾸는 메소드
                         fw= new FileWriter(dir ); 
                         fw.write( contents);
                         fw.flush();
                  } catch (IOException e1 ) {
                         // TODO Auto-generated catch block
                         e1.printStackTrace();
                  } 
                   try {
                         fw.write( contents);
                  } catch (IOException e ) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                  }

      }
      
}



import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

public class GUI extends JFrame {
       private JTextField textField ;
       private JTextArea textArea ;
       private JMenuItem mntmNewMenuItem ;
       private MANAGER tm ;
      
      
       public GUI() {
             super("텍스트저장기" );
             tm= new MANAGER();  // MANAGER 객체화
            
            getContentPane().setLayout( null);
            
            JLabel label = new JLabel("\uC81C\uBAA9");
             label.setBounds(17, 56, 60, 36);
            getContentPane().add( label);
            
             textField = new JTextField();
             textField.setBounds(74, 61, 570, 27);
            getContentPane().add( textField);
             textField.setColumns(10);
            
            JSeparator separator = new JSeparator();
             separator.setBounds(27, 107, 642, 2);
            getContentPane().add( separator);
            
            JLabel label_1 = new JLabel("\uB0B4\uC6A9");
             label_1.setBounds(17, 124, 60, 36);
            getContentPane().add( label_1);
            
             textArea = new JTextArea();
             textArea.setBounds(74, 133, 570, 332);
            getContentPane().add( textArea);
            
            JMenuBar menuBar = new JMenuBar();
            setJMenuBar( menuBar);
            
            JMenu mnNewMenu = new JMenu("\uBA54\uB274");
             menuBar.add(mnNewMenu );
            
             mntmNewMenuItem = new JMenuItem("\uC800\uC7A5");
             mnNewMenu.add(mntmNewMenuItem );
            
             mntmNewMenuItem.addActionListener(new aListener());
            
            setVisible( true);
            setSize(742,590);
            
      }
      
       public class   aListener implements ActionListener{
            
             @Override
             public void actionPerformed(ActionEvent e){
                  
                   if(e .getActionCommand().equals("저장")){
                        
                        FileDialog fd= new FileDialog(GUI.this ,"파일저장" ,FileDialog.SAVE);   // ()안에 첫번째:아버지가 될 frame,두번째:파일 탐색기 제목, 세번째:모드
                        
                        String content=textArea .getText();
                        String Filename=textField .getText();
                        
//1
                         fd.setFile( Filename+".txt" );   // 이렇게 하면 파일이름을 따로 하지 않아도 된다.
//2
                         fd.setVisible( true);  // 보여줘야하므로, setVisible(true); 를 해줘야함.
//3                     
                        String dir=fd .getDirectory();
                        
                         tm.writeMessage( dir+Filename +".txt" ,content );
                        

                        
                  }
                  
            }
            
      }

}







등록저장기(보기만 한것)
package test;

public class Main {

    public static void main(String[] args) {
        new GUI();
    }
}




package test;

public class VO {

    private String name;
    private String age;

    public VO(String name, String age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "이름=" + name + "  나이=" + age;
    }

}



package test;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class Manager {
    private FileWriter fw;
    private ArrayList<VO> alist = new ArrayList<>();

    public ArrayList<VO> getAlist() {
        return alist;
    }

    public void setAlist(ArrayList<VO> alist) {
        this.alist = alist;
    }

    public void addList(VO vo) {
        alist.add(vo);
    }

    public void save(String dir) {
        try {
            fw = new FileWriter(dir);
            fw.write(alist.toString());
            fw.flush();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}




package test;

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
import javax.swing.JList;
import javax.swing.JSeparator;
import javax.swing.JLabel;

public class GUI extends JFrame {
    private JTextField textField;
    private JTextField textField_1;
    private JList list;
    private JMenuItem menuItem;
    private JMenuItem menuItem_1;
    private Manager mg;

    public GUI() {
        super("간단등록부");
        mg = new Manager();
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu mnNewMenu = new JMenu("\uBA54\uB274");
        menuBar.add(mnNewMenu);

        menuItem = new JMenuItem("\uC800\uC7A5");
        mnNewMenu.add(menuItem);

        menuItem_1 = new JMenuItem("\uB4F1\uB85D");
        mnNewMenu.add(menuItem_1);
        getContentPane().setLayout(null);

        textField = new JTextField();
        textField.setBounds(72, 29, 116, 21);
        getContentPane().add(textField);
        textField.setColumns(10);

        textField_1 = new JTextField();
        textField_1.setBounds(255, 29, 116, 21);
        getContentPane().add(textField_1);
        textField_1.setColumns(10);

        list = new JList();
        list.setBounds(27, 92, 376, 124);
        getContentPane().add(list);

        JSeparator separator = new JSeparator();
        separator.setBounds(12, 71, 391, 11);
        getContentPane().add(separator);

        JLabel lblNewLabel = new JLabel("\uC774\uB984");
        lblNewLabel.setBounds(12, 32, 57, 15);
        getContentPane().add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("\uB098\uC774");
        lblNewLabel_1.setBounds(200, 32, 57, 15);
        getContentPane().add(lblNewLabel_1);

        menuItem.addActionListener(new alistener());
        menuItem_1.addActionListener(new alistener());
        setSize(446, 301);
        setVisible(true);

    }

    private class alistener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            if (e.getActionCommand().equals("등록")) {
                String name = textField.getText();
                String age = textField_1.getText();

                VO vo = new VO(name, age);
                mg.addList(vo);
                list.setListData(mg.getAlist().toArray());
                textField.setText("");
                textField_1.setText("");

            } else if (e.getActionCommand().equals("저장")) {

                FileDialog fd = new FileDialog(GUI.this, "저장", FileDialog.SAVE);
                fd.setVisible(true);
                String dir = fd.getDirectory();
                String fileName = fd.getFile();
                mg.save(dir + fileName);
            }
        }

    }
}








자바정리

자바 JDK 설치

자바 JDK 설치
교재: 자바 프로그래밍 바이블
JAVA DEVELOPMENT KIT (자바개발도구)

프로그램이란 무엇인가요?
컴퓨터를 가지고 어떤 일을 할 수 있도록 만들어 진 것!

프로그래밍 언어 종류: JAVA, C언어, C++, JSP, ASP, PHP 등등

설치방법
WWW.ORACLE.COM -> JAVA SE DOWNLOADS -> JAVA DOWNLOAD ->JAVA SE DEVELOPMENT KIT 8U101를 ACCECPT 동의 -> 자신의 컴퓨터 OS 사양에 맞는 프로그램을 선택하여 저장 -> 예 계속 누루고 설치 

CMD 창에서 java를 쳐서 제대로 설치됬는지 확인가능
java -version 누르면, 자바가 설치된 버전도 확인할 수 있음.







자바 응용프로그램의 구조&기본 규칙, path설정

# 추가 개발도구인 이클립스를 사용하기전에, 익숙해지기위해서 메모장활용
# 영문 대소문자를 정확하게 적어준다.
# 대부분의 컴퓨터 언어는 bin 밑에 명령어들이 모여있음(bin 아래에 javac 도 있다.)

자바 응용프로그램의 구조&기본 규칙
1) 반드시 하나이상의 클래스로 구성된다.  class 클래스명 {}
2) 반드시 하나의 main 메소드를 가져야한다.
3) 클래스명의 첫글자는 대문자로 한다. 파일명은 공백을 포함할수 없음.
4) 소스파일저장시 파일명은 클래스명과 동일하게 해준다.  확장자 java로 하기


path설정: 자바를 컴파일하고 실행하는 명령어(javac, java)를 어느 폴더에서라도 자유롭게 사용하기 위해서 path를 설정 
기존에 path 설정이 되었다고 한다면, 파일경로 맨끝에 ;을 하고 추가 경로를 복사붙여놓기를 하면 된다.

"c:\program\ProgramFiles\java\jdk1.8.0_101\bin"경로를 복사해서, 내컴퓨터 -> 속성 -> 고급시스템변수설정에서 환경변수설정 시스템 변수에서 Path에 추가! 변수값 해당경로를 복사 해서 붙여준다. 이후, 확인, 확인.

path 설정이 끝나면, cmd창에서 cd\ 치면 c:\로 이동한다.
cd javaTest\day0817 쳐서 javatest/day0817폴더로 이동
dir을 쳐보면 해당폴더에 저장된 파일현황을 보여준다.

컴파일: 원시파일(소스파일)을 컴퓨터가 알아 들을 수 있는 상태로 번역 하는 작업
cmd 창에서 javac 확장자를 포함한 파일명을 쳐준다.
ex) javac Hello.java

이후, dir을 눌러보면, 파일2개가 나온것을 알수 있다.

실행: java 클래스명하면 실행이 된다.
ex) java Hello 치면 출력화면: Hello World


Hello World 출력 연습

public class Hello
{
 public static void main(String []args)
 {
  System.out.println("Hello World"); // System은 자바가 미리 만들어둔 4000여개의 클래스(API) 중 1개로 기본적인 시스템언어들이 있다.

 }
}




Scanner 사용연습


import java.util.Scanner;  // Scanner라는 클래스를 쓰겠다고 선언하기

class Soge{

 public static void main(String []args){
  String name;  // 이름과 나이를 저장할 변수를 선언한다.
  int age;
  
  Scanner sc = new Scanner(System.in);  // 키보드로 부터 입력받기 위하여, Scanner 객체를 생성
  
  System.out.println("이름을 입력해주세요.");
  name = sc.next();  //사용자로부터 이름을 입력받는다.  "="는 java에서는 대입을 뜻함.
  System.out.println("나이를 입력해주세요.");
  age = sc.nextInt();   //사용자로부터 나이를 입력받는다.

  System.out.println("이름: "+name+ "\n나이: "+age);
  
 }
}



""안에 \n을 치면 자동줄바꿈이 된다.
System.out.println("김준성 \n 31);
출력화면
김준성
31



API 보는 방법

API 보는 방법
왼쪽화면 윗부분 클래스 위치





클래스 위치는 패키지라고 하며, 기능, 특성등을 위주로 만든 폴더같은 개념이다.
세부 설명들은 해당 class(API)안의 메소드의 데이터 형태와 설명이 있다.








에디트 플러스 다운 설치하기

에디트 플러스 다운 설치하기 -> 자신 컴퓨터 os 사양에 맞는것을 다운


예 계속... 그 다음 설치완료



계산연습

//  사용자한테 상품명, 수량, 단가를 입력받아 판매가격을 구하여 출력하는 프로그램을 작성한다.
//  (클래스명, 변수명, 출력화면 등은 자유롭게 한다.)

import java.util.Scanner;

public class ProductMoney{

 public static void main(String []args){
  
  Scanner sc = new Scanner(System.in);

  String pName;
  int num;
  int payUnit;
  int totalSell;
  
  System.out.println("상품명을 입력해주세요.");
  pName = sc.next();

  System.out.println("수량을 입력해주세요.");
  num = sc.nextInt();
  
  System.out.println("단가를 입력해주세요.");
  payUnit = sc.nextInt();

  totalSell = num*payUnit;
  
  System.out.println("**상품 정보**");
  System.out.println("상품명: "+pName);
  System.out.println("수량: "+num);
  System.out.println("단가: "+payUnit);
  System.out.println("판매가격: "+totalSell);


 }
}




오류:
1. 문법오류:
 - 자바가 알아들을 수 없는 문장
 - 자바 규칙에 맞지 않는 문장으로 발생한 오류
 - 컴파일시 오류 메시지를 확인하고 오류를 제거한다.

2. 논리오류:
 - 컴파일이되고 실행도 되지만 결과가 이상한 값이 나오는 오류 (버그라고 함. 디버깅을 통해 오류를 해결한다.)

3. 실행오류: 컴파일이 되고 사용자가 정상적인 실행시에는 잘동작하지만 사용자의 부주의로 인해 실행시에 발생하는 오류를 말함.(예외라고 함. 예외처리를 통해서 해결함)

4. 예외가 발생할 만한 문장들을 try{}로 묶는다.




예외오류 연습

import java.util.Scanner;

class ErrorTest01
{
 public static void main(String[] args)
 {
  
  try{  // try catch 구문으로 예외오류 잡기 선행학습
  Scanner sc = new Scanner(System.in);
  int n1,n2,sum;
  
  System.out.println("첫번째수를 입력하시오.");
  n1 = sc.nextInt();

  System.out.println("두번째수를 입력하시오.");
  n2 = sc.nextInt();

  sum = n1+n2;
  System.out.println("두수의 합은 "+sum+"입니다.");
  }catch(Exception e){
   System.out.println("경고! 숫자를 입력하세요.");
  }
 }
}





상수의 이해 연습

식별자
클래스명, 메서드명, 변수명과 같이 서로를 구별하는 이름을 의미

상수 앞에는 final 붙으며, 한번 정해진 테이터값은 바뀔수 없음.
이점이 상수와 변수의 차이점


class Person
{
 String name = "홍길동";  // 변수
 int age=20;  // 변수
 final String ADDR = "마포구 신수동";  //  상수;
}

class PersonTest
{
 public static void main(String[] args)
 {
  Person p = new Person();
  p.name = "강감찬";
  p.age = 40;
  //p.ADDR = "달나라";  // final 로 지정된 값은 상수로써, 결과같이 상수값은 바꿀수 없다고, 에러가 나올것이다.

  System.out.println("이름: " + p.name);
  System.out.println("나이: " + p.age);
  System.out.println("주소: " + p.ADDR);
 }
}




예약어: 특정 의미가 부여되어 이미 만들어진 식별자로써, 프로그래밍에서 식별자로 사용할 수 없음.

기본자료형의 종류
논리형: boolean
문자형: char
정수형: byte < short < int < long
실수형: float < double

BooleanTest 이해연습

class BooleanTest
{
 public static void main(String[] args)
 {
  //  boolean은 true, false를 저장하기 위한 자료형

  boolean f = false;

  System.out.println(f);  // 처음 논리값이 false이므로, 출력값 false

  int age = 20;
  f = age >= 20;

  System.out.println(f);  //  두번째 논리판단이 true인것을 다시 f에 대입하였으므로, 결과값 true
 }
}




char 이해연습

/*
하나의 글자와 문자열의 취급이 다름.
k 와 korea를 예를 든다면, 'k', "korea"로 표현한다.
즉, 한글자=>' ', 문자열=> " " 이다. 
  char ch = 'k'
  String str = "korea"
String은 클래스(API)인데, 특수하게 기본형 데이터표현방식으로 쓰일 수 있도록 허용됨.
*/

class CharTest
{
 public static void main(String[] args)
 {
  char a = 'k';
  System.out.println("a");  // 출력값: String 형식의 문자열 a
  System.out.println('a');  // 출력값: char 형식의 한글자 a
  System.out.println(a);   // 출력값: a에 대입된 k출력

  a = 'o';  // a에 새로운 데이터 대입됨.
  // a = "korea";  // 문법오류, char 형식의 변수에 문자열을 넣을 수 없음.
  String b = "korea";
  System.out.println(a);
  System.out.println(b);
 }
}




charAt, for, if 사용이해 연습1

// 문제: 사용자한테 문자열을 입력받아 입력한 문자열 중에 대문자 'A'의 개수를 파악하여 출력하는 프로그램을 작성
class CharTest02
{
 public static void main(String[] args)
 {
  int n =0;  // 개수를 세기위한 변수선언

  String str = "Abc Hello Abc java";
  // char ch = str.charAt(0);  // chatAt: 문자열 str에서 위치가 0번째인 것을 출력하라. 그리고 그것을 ch에 대입
  
  //반복문 사용
  for(int i =0; i < str.length() ; i=i+1)
  {
   char ch = str.charAt(i);
   if(ch=='A'){
    n=n+1;
   }
  }  // for의 종료

  System.out.println("대문자 A개수: "+n);
 }
}




8교시
charAt, for, if, nextLine 사용이해 연습2

// 문제: 사용자한테 문자열을 입력받아 입력한 문자열 중에 대문자 'A'의 개수를 파악하여 출력하는 프로그램을 작성
import java.util.Scanner;

class CharTest02
{
 public static void main(String[] args)
 {

  Scanner sc = new Scanner(System.in);
  int n =0;  // 개수를 세기위한 변수선언

  System.out.println("문자열을 입력하시오.");
  String str = sc.nextLine();  // nextLine공백까지 문자로 인식함


  //반복문 사용
  for(int i =0; i < str.length() ; i=i+1)
  {
   char ch = str.charAt(i);
   if(ch=='A'){
    n=n+1;
   }
  }  // for의 종료

  System.out.println("대문자 A개수: "+n);
 }
}




Byte, Short, Int, Long의 범위와 오버플로우, 언더플로우의 이해연습

class ByteShortIntLongTest
{
 public static void main(String[] args)
 {
  //  1byte = 8 bit

  //  int pay = 20000000;
  int pay=128;  //  -129일경우 언더플로우 결과값 127,     128일경우 오버플로우 결과값 128, -128

//  즉, 128은 byte 형변환
  System.out.println(pay);

  byte pay2 = (byte)pay; 
  System.out.println(pay2);    //  오버플로우현상으로 출력값 -128이됨!
 
  byte b = 100;  //  자바에서는 정수의 값이 오면 기본적으로 int로 취급하지만, 범위내 값의 int라 하더라도, byte 범위내 속한다면, 값이 변하지 않고, 그대로 형변환가능함.
  System.out.println(b);
}
}







+ Recent posts