◎ JAVA

◆ Map

  • Map<Key, Value>
  • 개별 데이터를 빨리 출력하기 위해서 이름이 있다.
  • (K)ey 와 (V)alue 가 세트로 저장되는 저장소이다.
  • List와 Set은 []안에 데이터가 출력된다.
  • Map은 {}안에 데이터가 출력된다.
  • (K)ey만 보면 Set과 구조가 같다.(중복이 불가)
  • (V)alue는 중복이 가능.
  • (K)ey로 (V)alue를 부를 수 있지만 반대는 불가능하다.
  • 순서가 무시되면서 출력된다.
  • (map이 먼저 나왔으며 그것의 일부를 참고해서 set을 만들었다.)
  • Map에서 모든 데이터를 꺼내는 직접적인 방법은 없다.
  • 다른 저장소나 다른 형태로 변환하여 꺼내는 방법은 있다.
import java.util.HashMap;
import java.util.Map;
public class Test01 {

	public static void main(String[] args) {
		Map<String, Integer> data = new HashMap<>();
	
		//데이터 추가
		//- .add()는 한 개 추가하는 명령
		//- .put()은 두 개를 세트로 추가하는 명령
		data.put("허니버터칩", 3000);
		data.put("참이슬후레쉬", 1500);
		data.put("처음처럼", 1400);
		data.put("카스", 2500);
		data.put("신라면", 1100);
	
		//같은 (Key)값이 들어가면 (V)alue 값이 수정된다.
		data.put("허니버터칩", 4000);

		//출력
		System.out.println(data); 
		System.out.println(data.size());
	
		//검색 - (K)ey와 (V)alue의 데이터가 두 종류이기 때문에 검색 메소드도 두 개를 제공한다.
		System.out.println(data.containsKey("허니버터칩"));
		System.out.println(data.containsValue(2000));
	
		//추출 - (K)ey와 (V)alue를 추출
		System.out.println(data.get("신라면"));
		System.out.println(data.get("짜파게티"));
	
		//data.get("짜파게티")의 값이 null이기 때문에 원시형인 int가 아니라 함수형클래스인 Integer를 사용해야 한다.
		Integer price = data.get("짜파게티");
		System.out.println("price = " + price);
	
		//삭제 - (K)ey를 이용하여 데이터를 삭제
		data.remove("허니버터칩");
		System.out.println(data);
		System.out.println(data.size());	
	}
}
 
  1. Set으로 변환해서 출력하는 방법

    Set<String> names = items.keySet();
    
    for(String name : names) {
    	int price = items.get(name);
    	System.out.println(name + " , " + price);
    }
  2. Map에 있는 내부 클래스인 Entry 형태로 출력하는 방법 (사용 빈도 낮음)

    //for(Entry<String, Integer> entry : items.entrySet()) {
      for(Entry entry : items.entrySet()) {
    		System.out.println(entry.getKey());
    		System.out.println(entry.getValue());
    }

◆ File

  • 파일에 크기는 저장된 byte(글자) 수와 같다.

  • 파일은 데이터를 저장하고 있다.

  • Java에서는 파일 및 디렉터리를 모두 File 클래스로 제어한다.

  • / 는 들어가기 이다.

  • ./ 는 현재 폴더를 의미하며 생략이 가능하다.

  • ../ 는 상위 폴더이며 생략이 불가능하다.

    	public class Test01 {
    		public static void main(String[] args) {
    			//제어할 대상 파일의 객체를 생성 (없는 파일도 객체 생성 가능)
    			File a = new File("temp/hello.txt"); //temp 안에 hello.txt 파일
    			File b = new File("temp", "hello.txt"); // (폴더명, 파일명)
    	
    			System.out.println("성공!");
    	
    			//파일 분석
    			System.out.println(a.exists()); //파일이 존재하는가?
    			System.out.println(b.exists());
    	
    			//파일과 폴더(디렉터리) 구분
    			System.out.println(a.isFile()); //파일인가?
    			System.out.println(a.isDirectory()); //디렉터리인가?
    	
    			//파일의 크기 (= 저장되어 있는 byte(글자) 수)
    			System.out.println(a.length());
    	
    			System.out.println(a.getName()); //파일명
    			System.out.println(a.getPath()); //파일의 위치(상대 경로)
    			System.out.println(a.getAbsolutePath()); //파일의 위치(절대 경로)
    	
    			//상대 경로와 절대 경로
    			//- 상대 경로는 특정 지점을 기준으로 계산한 경로(ex : 우리 옆집)
    			//- 상대 경로는 서로 다른 환경이어도 같은 파일을 가르킬 수 있다.
    			//- 절대 경로는 모든 상황에서 동일한 경로이다.(ex : 서울시 영등포구 선유로길 59)
    	
    			System.out.println(a.canRead()); //읽기 가능?
    			System.out.println(a.canWrite()); //쓰기 가능?
    			System.out.println(a.isHidden()); //숨겨진 파일이 있는가?
    	
    			System.out.println(a.lastModified()); //마지막 수정 시각
    	
    			Date d = new Date(a.lastModified());
    			Format f = new SimpleDateFormat("y년 M월 d일 H시 m분 s초");
    			System.out.println(f.format(d));	
    		}
    	}

◆ Directory(디렉터리)

  • 자바는 파일과 디렉터리의 생성 방법이 같다.(사용법은 다르다.)

    	public class Test02 {
    		public static void main(String[] args) {
    			File dir = new File("temp");
    		 		System.out.println(dir.isDirectory());
    	
    				if(!(dir.isDirectory())) {
    				System.out.println("디렉터리가 아닙니다.");
    				System.exit(-1);
    				}
    				//디렉터리는 크기가 없다.(내용물의 크기만 있을 뿐이다.)
    				System.out.println(dir.length());
    	
    				//디렉터리에서 의미가 있는 건 뭘까?
    				//- 안에 무엇이 있느냐가 중요한 포인트이며 이와 관련된 명령이 존재
    				//- .listFiles()를 사용하여 내부에 들어있는 파일 목록을 반환
    	
    	 			File[] files = dir.listFiles();
    				System.out.println("파일 개수 : " + files.length);
    				//for(int i = 0; i < files.length; i++ { //변경과 조회가 가능하다.
    
    				for(File file : files) { //변경을 불가능 하고 조회만 가능하다.
    				System.out.println(file.getPath());	
              		//System.out.println(file.getAbsolutePath());
    				}
    		}
    	}

다른 파일 생성 방법

  • 상대 경로로 기준을 잡으면 해당 위치에서 벗어나지 못한다.

  • 절대 경로 변경해서 위치 변경을 할 수 있게 한다.

  • 더이상 상위 폴더가 없을 경우 "null" 값이 출력 된다.

  • ex) /root를 입력하면 최상위 폴더로 변경할 수 있게 설정도 할 수 있다.

    	public class Test04 {
    		public static void main(String[] args) {
    			//특정 위치에서 하위 파일을 들어가는 방법
    			//File dir = new File("temp");
    			//File target = new File(dir, "hello.txt");
    	
    			File target = new File("temp");
    			target = target.getAbsoluteFile(); //절대 경로로 변환
    			target = new File(target, "hello.text"); //특정 대상으로 이동
    
    			//상위 폴더의 정보를 가져오는 방법
    			target = target.getParentFile();//상위 폴더로 이동
    			target = target.getParentFile();
    			target = target.getParentFile();
    			target = target.getParentFile();
    			target = target.getParentFile();
          
    			System.out.println(target);
    		}
    	}

◆ 싱글 바이트(single byte)

  • 목표 : 싱글 바이트 단위 데이터 출력(저장)

  • 준비물 : 파일 객체(없으면 생김), (출력용)스트림 객체이다.

  • 확장자는 운영체제에서 활용되므로 우리가 알지 않아도 된다.

    	public class Test01 {
    		public static void main(String[] args) throws IOException {
    				
    			//도구 준비
    			File target = new File("temp", "single.kh");
    			FileOutputStream stream = new FileOutputStream(target); 
    	
    			//출력 : write, 입력 : read
    			//구조 : [프로그램] → [stream] → [target] → [single.kh]
    			stream.write(104); //h
    			stream.write(101); //e
    			stream.write(108); //l
    			stream.write(108); //l
    			stream.write(111); //o
    			stream.write(32); //space
    			stream.write('j');
    			stream.write('a');
    			stream.write('v');
    			stream.write('a');
    			stream.write(10); // \n 은 enter
    	
    			stream.write(30000); //'0'(48) 로 변환되어 출력
    	
    			byte[] b = new byte[] {'H', 'E', 'L', 'L', 'O'};
    			stream.write(b);//b에 들어있는 모든 값을 순서대로 출력
    			stream.write(b, 0, 4);//b 배열을 0번부터 4개 출력
    	
    			//입출력 통로는 반드시 close()가 필요
    			stream.close();
    		}
    	}
profile
Backend Developer

0개의 댓글