*스레드 실습
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 |
댓글