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());
}
}
Set으로 변환해서 출력하는 방법
Set<String> names = items.keySet();
for(String name : names) {
int price = items.get(name);
System.out.println(name + " , " + price);
}
Map에 있는 내부 클래스인 Entry 형태로 출력하는 방법 (사용 빈도 낮음)
//for(Entry<String, Integer> entry : items.entrySet()) {
for(Entry entry : items.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
파일에 크기는 저장된 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));
}
}
자바는 파일과 디렉터리의 생성 방법이 같다.(사용법은 다르다.)
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);
}
}
목표 : 싱글 바이트 단위 데이터 출력(저장)
준비물 : 파일 객체(없으면 생김), (출력용)스트림 객체이다.
확장자는 운영체제에서 활용되므로 우리가 알지 않아도 된다.
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();
}
}