본문 바로가기
웹개발 수업/JAVA

웹개발_JAVA 22

by gugigugi92 2023. 3. 11.

*스레드 실습

package threadTask;


// 동물원에는 3마리의 동물이 있다. 
// 각 동물은 울음 소리가 다르고 2마라의 동물은 동시에 운다.
// 나머지 1마리 동물은 2마리 동물이 모두 울고 나면 막지막에 운다
//
//※ 반드시 join()을 사용한다.
//※ 각 동물은 3번씩만 운다.
//※ 람다식을 사용한다.
public class Animal {
   public void makeSound(Runnable runnable) {
//	   울음소리 배열
      String[] animalsounds = {"어~흥", "음메에에", "아우~"};
//     울음소리들을 스레드 객체로 선언
      Thread[] threads = new Thread[animalsounds.length];

      for (int i = 0; i < threads.length; i++) {
//    	  동일한 자원 공유, 이름은 다름
         threads[i] = new Thread(runnable, animalsounds[i]);
      }
      
      for (int i = 0; i < threads.length; i++) {
         // 멀티쓰레드 실행
    	  threads[i].start();
         if(i != 0) { // 0,1번시작할때 join하면 0,1번이 끝나야 2번방 실행
            try {threads[i].join();} catch (InterruptedException e) {;}
         }
      }
      
   }
}
package threadTask;

public class Zoo {
   public static void main(String[] args) { 
      // animal.makesound 메서드에 자원전달
	   new Animal().makeSound(() -> {
         for (int i = 0; i < 3; i++) {
            System.out.println(Thread.currentThread().getName());
            try {Thread.sleep(500);} catch (InterruptedException e) {;}
         } 
      });
   }
}

출력결과


Date

package date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
//date

public class DateTest {
public static void main(String[] args) {
//	open Decaration에 사용 가능한형식이 나와있다
	SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
	SimpleDateFormat format1 = new SimpleDateFormat("yyyy년/MM월/dd일 HH:mm:ss");
	SimpleDateFormat format3 = new SimpleDateFormat("yyyy년 MM월 dd일 HH:mm:ss");
	Date date = new Date();
	System.out.println(date); //기본 date
	
	try {
		//parse로 date 타입으로 바꿔야 계산이 가능하다
        //date 타입을 계산하기위해선 parse를 사용하여 문자열값으로 변경
		date = format3.parse("2024년 6월 12일 10:10:11");
		System.out.println(date);
	} catch (ParseException e) {;}

	Calendar calendar = Calendar.getInstance(); 
	System.out.println(format.format(calendar.getTime())); 
    // getTime = Calendar 을date 타입으로 바꿔주는 메서드 
	//calendar은 new 사용을못한다.
	
	//형식 변경
	System.out.println("");
	System.out.println(format.format(date));
	System.out.println(format1.format(date));

	
	System.out.println("");
//	localdate 수정
	LocalDate localDate = LocalDate.of(2011, 06, 2);
	System.out.println(localDate);
	System.out.println(localDate.getMonthValue());
	
}
}

출력결과

 


파일 입출력
  
   Stream이라는 연결통로를 통해 원본 데이터가 알맞는 인코딩 방식으로 전송된다.
     byte단위로 입출력되기 때문에 개별처리이며, 상세 연산이 필요하지 않다면
   Buffer(txt 전송시 사용)를 사용한 입출력을 권장한다. Buffer를 사용하면 일괄처리가 가능해진다.
   Steam/Buffer - 동영상, 이미지 전송시 사용

Stream,Buffer
(부분 일괄처리)
Buffer(임시공간) 
"안녕" 전달 완료 ->txt전달↘
 
JAVA 
"안녕" 버퍼로 전송↗
Stream →
인코딩(원본→ byte) 
디코딩(byte → 원본)
.TXT


   ※ 인코딩 방식
      인코딩 방식은 완성형과 조합형이 있다.
      - 완성형(데이터 조회 후 출력): 각, 간, 갇, 갈, 감, ... , 갛, ...
      - 조합형(완성형보다 빠름): ㄱ + ㅏ + ㄱ ex) UTF-8  

      조합형이 효율적이며 byte단위로 데이터를 전송할 때 고정된 byte가
      아니기 때문에 가변형 인코딩 방식을 선호한다.
      조합형이면서 가변형인 인코딩 방식은 UTF-8이며, 전 세계에서 가장 많이
      사용되는 방식이다.

   Writer(입력)
     BufferedWriter : 버퍼를 사용한 입력 클래스
     FileWriter : 전달한 경로의 파일을 출력하기 위한 목적으로 열어준다.

package fileTest;

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 java.nio.file.Files;
import java.nio.file.Paths;

public class FileTest {
//  절대 경로: 어디에서 작성해도 찾아갈 수 있는 경로, C:/a/b
//  상대 경로: 현재 위치에 따라 변경되는 경로, .., ., ./a, a
   public static void main(String[] args) throws IOException{ // 예외 던지기: 해당 메소드를 사용할때 한번만 try catch
      FileTest fileTest = new FileTest();
      

//    버퍼 통로, txt파일 생성
      BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("test.txt", true)); //true 있으면 이어쓰기 없으면 덮어쓰기
      bufferedWriter.write("안녕하세요\n"); //txt에 내용 x 아직 버퍼에있다
      bufferedWriter.close(); // txt에 내용 입력됨

출력결과



   Reader(출력)
     BufferedReader : 버퍼를 사용한 출력 클래스
     FileReader : 전달한 경로의 파일을 출력하기 위한 목적으로 열어준다.
    전달한 경로에 파일이 없다면 FileNotFoundException이 발생한다.

      BufferedReader bufferedReader = null;
      
      //read 방법1
      //String 생성자는 byte를 문자열로 자동으로 디코딩해준다
      String content = new String(Files.readAllBytes(Paths.get("test.txt")));
      System.out.println(content);
    //read 방법2
      try {
         bufferedReader = new BufferedReader(new FileReader("test.txt"));
         String line = null;
         while((line = bufferedReader.readLine()) != null) { // 가져올게 없으면 null null이 아닐때 txt 내용 출력
            System.out.println(line);
         }
   
      } catch (FileNotFoundException e) {
         System.out.println("파일을 찾을 수 없습니다.");
         }

출력결과



   File(파일 정보)
전달한 경로에 있는 파일의 정보를 담는 타입
디렉터리 생성, 해당 경로의 전체 파일 목록, 파일 삭제 등

  finally {
         try {
            if(bufferedReader != null) {
               bufferedReader.close(); //파일이 켜져있다면 닫아주고
            }
         } catch (Exception e) {
            throw new RuntimeException(e);// 직접 종료
         }
      }
      
      File file = new File("test.txt");
      if(file.exists()) { // 경로가 존재한다면!
         file.delete(); // 파일삭제
      }

 

'웹개발 수업 > JAVA' 카테고리의 다른 글

웹개발_JAVA 21  (0) 2023.03.06
웹개발_JAVA 20  (0) 2023.02.21
웹개발_JAVA 19  (0) 2023.02.15
웹개발_JAVA 18  (2) 2023.02.15
웹개발_JAVA 17  (0) 2023.02.14

댓글