김미썸코딩

11/23 - Java (10) : API (List, Set, Map, Properties, Stack, Queue), NIO (메서드, 파일 리스트) 본문

빅데이터 플랫폼 구축을 위한 자바 개발자 양성과정

11/23 - Java (10) : API (List, Set, Map, Properties, Stack, Queue), NIO (메서드, 파일 리스트)

김미썸 2020. 11. 26. 08:21
728x90

API  

 

   *   데이터

                  1. 임시 - 프로그램이 종료되면 삭제

                           한개 데이터            - 변수나 상수

                           여러개 데이터         - 객체, 배열

                                      객체 , 배열 => 자료(저장, 관리) 구조 => Collection 류 (객체)

                  2. 영구 - 영구저장

                            로컬    - 파일

                                           디렉토리(특수목적 파일)/ 파일

                                           java.io

                            원격    - 데이터 베이스(네트워크)

 

 

 

 

 


 

 

 

 

 

 

 

 

 

Collection


▷p722

클래스형식으로 자료를 저장할 수 있는 구조.

컬렉션이라는 가장 큰 인터페이스가 존재.

배열의 확장판.

모든 컬렉션에 담기는 타입은 무조건 객체타입만 가능하다.

ex) int (X) -> Integer(O)

 

인터페이스 분류 특징 구현 클래스
Collection List - 순서를 유지하고 저장
- 중복 저장 가능
ArrayList, Vector, LinkedList
Set - 순서를 유지하지 않고 저장
- 중복 저장 안 됨
Hashtable, TreeSet
Map - 키와 값의 쌍으로 저장
- 키는 중복 저장 안 됨
HashMap, Hashtable, TreeMap, Properties

 

1. List

add()를 하면 ()안의 것을 Object로 형변환 하고 ArrayList에 집어넣는다.

ArrayList 는 List 와 같다. 

 

아래는 선언이다.

List<String> al1 = new ArrayList<String>();
ArrayList<String> al2 = new ArrayList<String>();

두개다 같은 말이다.

 

1-1. add(), size(), get()

import java.util.ArrayList;

public class ArrayListEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList al1 = new ArrayList();
		ArrayList al2 = new ArrayList(100);
		
		// Object
		al1.add("박문수");
		String str = "이몽룡";
		al1.add((Object)str);
		// al1.add(str); // 위에거 이렇게 생략가능
		
		// 데이터의 갯수
		System.out.println(al1.size());
		
		al1.add("성춘향");
		System.out.println(al1.size());
		
		al1.add(1);
		al1.add(3);
		
		System.out.println(al1.size());
		
		System.out.println(al1.get(0));
	}

}

 

1-2. Generic  -  데이터 안정성

동일 자료형을 넣어야 for문으로 데이터를 가져올 때 형변환을 거치는데 그때 에러가 안걸린다. 

그래서 generic을 써서 들어갈수 있는 자료형태를 정해준다.

 

예를들어,

ArrayList al1 = new ArrayList();

al1.add("박문수");	// String -> Object
al1.add("이몽룡");	// String -> Object
al1.add(1);		   // int -> Integer -> Object
		

일때, 

 

for 문으로 데이터를 가져오면 (generic이 아니라서 향상된 for문을 쓰기 어려움)

// 데이터를 가져올때 (for문을 사용할 때)
for( int i = 0; i <al1.size(); i++) {
    // 형변환
    String str = (String)al1.get(i);
    System.out.println(str);
}

이렇게 가져오기 때문에 형변환에서 에러가 생긴다. 

 

 

 

generic 을 사용하면 선언을

ArrayList<String> al2 = new ArrayList<String>();

이렇게 하고, 데이터를 add하면  

이렇게 이클립스에서 add(1)에 에러가 걸린다. 

 

generic이면 다음과 같이 향상된 for문 사용이 가능하다.

al2.add("이몽룡");
// al2.add(1);	// generic 으로 String이기 때문에 에러
al2.add("박문수");
for(String str : al2) {
    System.out.println(str);
}

 

 

1-3. set()

al1.add("이몽룡");
al1.add("박문수");

for(String str : al1) {
    System.out.println(str);
}

al1.set(0, "월매");	// 이몽룡 -> 월매 로 바뀜

for(String str : al1) {
    System.out.println(str);
}

 

 

1-4. 데이터 삭제 - remove(), removeAll(), clear()

al1.remove(0);	// 월매 삭제
for(String str : al1) {
    System.out.println(str);
}

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		List<String> list = new ArrayList<String>();
		
		list.add("Java");
		list.add("JDBC");
		list.add("Servlet/JSP");
		list.add(2, "Database");
		list.add("iBATIS");
		
		int size = list.size();
		System.out.println("총 객체 수: " + size);
		System.out.println();
		
		String skill = list.get(2);
		System.out.println("2: "+ skill);
		System.out.println();
		
		for(int i = 0; i<list.size(); i++) {
			String str = list.get(i);
			System.out.println(i + ":" + str);
		}
		
		System.out.println();
		
		list.remove(2);
		list.remove(2);
		list.remove("iBATIS");
		
		for(int i = 0; i<list.size(); i++) {
			String str = list.get(i);
			System.out.println(i + ":" + str);
		}
		
		
	}

}

 

 

1-5. Arrays, indexOf()

import java.util.List;
import java.util.Arrays;

List<String> al1 
= Arrays.asList("홍길동", "신용권", "김자바");

이렇게 List와 Arrays를 import하고, asList를 통해 add 처럼 데이터를 List에 추가한다. 

Arrays를 쓰는 경우 ArrayList가 아닌 List를 써야한다. (ArrayList와 List는 같은 거지만 여기선 그렇게 해야함)

 

 

 

indexOf로 데이터를 찾아 위치(인덱스)를 알아내는 것이 가능하다.

import java.util.List;
import java.util.Arrays;

public class ArrayListEx04 {

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

		
		List<String> al1 
		= Arrays.asList("홍길동", "신용권", "김자바");
		
		// 검색
		int index = al1.indexOf("김자바");
		System.out.println(index);
	}

}

 

1-6. ArrayList 에 객체 담기

public class Person {
	private String jumin;
	private String name;
	private int age;
	
	// setter
	public Person(String jumin, String name, int age) {
		this.jumin = jumin;
		this.name = name;
		this.age = age;
	}
	
	// getter
	@Override
	public String toString() {
		return "Person [jumin=" + jumin + ", name=" + name + ", age=" + age + "]";
	}
	
	
	
}
import java.util.ArrayList;

public class ArrayListEx05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person("1111", "홍길동", 25);
		Person p2 = new Person("1112", "박문수", 35);
		Person p3 = new Person("1113", "강감찬", 45);
	
		ArrayList<Person> al = new ArrayList<Person>();
		
		al.add(p1);
		al.add(p2);
		al.add(p3);
		
		for(Person p : al) {
			System.out.println(p.toString());
		}
	
	}

}

 

 

 

1-7. Vector와 메서드가 똑같다. 객체의 저장 방식만 다르다.

▷p730

 

 

 

 

 

 

 

 

2. Set

▷p733

HashSet을 가장 많이 쓴다.

get 이 없기 때문에 iterator와 향상된 for문으로 데이터를 가져올 수 있다.

객체 내부를 볼 수 있도록 toString()이 오버라이딩 되어있기 때문에 배열 형태로 set을 볼수 있다.

 

중복을 제거하는 흐름이 내부적으로 있어서 현재 데이터와 중복되는 값을 넣으면 데이터가 변하지 않음

 

예전에는 향상된 for문이 안돼서 iterator로 값을 가져왔다.

 

HashSet<String> hs1 = new HashSet<String>();
Set<String> hs2 = new HashSet<String>();

이와 같이 선언한다. 둘다 같은거다.

 

2-1. 향상된 for문, Iterator

전통적인 방법이다.

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		HashSet<String> hs1 = new HashSet<String>();
		Set<String> hs2 = new HashSet<String>();	// 위랑 같은 얘기
		
		hs1.add("아메리카노");
		hs1.add("에스프레소");
		hs1.add("카푸치노");
		
		// 중복된 값을 넣으면 추가되지 않음 
		hs1.add("아메리카노");
		hs1.add("에스프레소");
		hs1.add("카푸치노");
		hs1.add("모카");
		
		System.out.println(hs1.size());
		// 내부를 볼수 있도록 toString()이 오버라이딩 되어있다.
		// 배열 형태로 보인다.
		System.out.println(hs1.toString());
		
		for(String str: hs1) {
			System.out.println(str);
		}
		
		// 전통적인 방법
		Iterator<String> i = hs1.iterator();
		while(i.hasNext()) {
			System.out.println(i.next());
		}
		
	}

}

 

 

문제) 중복하지 않는 6개의 숫자를 5번 추출

 

import java.util.HashSet;
import java.util.Random;

public class LottoEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashSet<Integer> nums = new HashSet<Integer>();
		
		for(int i = 1; i<=5; i++) {
			while(true) {
				nums.add((int)(Math.random() * 45)+ 1);
				if(nums.size() == 6) {
					break;
				}
			}
			System.out.println(nums.toString());
			nums.clear();
		}
	}
}

 

2-2. 내용은 같으나 참조값이 다른 멤버

public class Member {
	public String name;
	public int age;
	
	public Member(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public int hashCode() {
		return name.hashCode() + age;
	}

	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) {
			Member member = (Member) obj;
			return member.name.equals(name) && (member.age == age);
		}else {
			return false;
		}
	}
	
	
}
import java.util.HashSet;

public class HashSetEx02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Member m1 = new Member("홍길동", 25);
		Member m2 = new Member("홍길동", 25);
		
		// 내용은 같으나 참조값이 틀린 멤버
		HashSet<Member> hs = new HashSet<Member>();
		hs.add(m1);
		hs.add(m2);
		
		System.out.println(hs.size());
	}
}

 

 

 

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetExample1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Set<String> set = new HashSet<String>();
		
		set.add("Java");
		set.add("JDBC");
		set.add("Servlet/JSP");
		set.add("Database");
		set.add("iBATIS");
		
		int size = set.size();
		System.out.println("총 객체수: " + size);
		
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()) {
			String element = iterator.next();
			System.out.println("\t" + element);
		}
		
		set.remove("JDBC");
		set.remove("iBATIS");
		
		System.out.println("총 객체수: " + set.size());
		
		iterator = set.iterator();
		while(iterator.hasNext()){
			String element = iterator.next();
			System.out.println("\t" + element);
		}
		
		set.clear();
		if(set.isEmpty()) {System.out.println("비어 있음");}

	}

}

 

 

 

 

 

3. Map 

hashMap을 배운다.

키와 값으로 구성되어 있고, 키를 인덱스처럼 사용하는것이다.

키를 통해서 값을 가져온다.  (iterator, 향상된 for문)

 

앞의 List와 Set은 toString()을 했을 때 [ , , ]로 배열 형태로 나오지만,

Map은 {키이름 = 값내용}형태로 나온다.

 

키이름이 중복되는 경우엔? 그자리를 새로운 데이터가 대체 하게 된다. 

 

 

3-1. 선언

HashMap<String, String> hm = new HashMap<String, String>();

위와 같이 선언한다.

 

 

3-2. put() , get()

 

(1) 데이터 넣기 - put()

HashMap<String, String> hm = new HashMap<String, String>();

hm.put("a", "박문수");
hm.put("b", "이몽룡");
hm.put("c", "홍길동");

hm.put("d", "월매");

hm.put("c", "이순신");

 

(2) 데이터 가져오기 - get()

데이터를 get으로 가져올 땐 아래처럼 키를 사용한다. 

HashMap<String, String> hm = new HashMap<String, String>();

hm.put("a", "박문수");
hm.put("b", "이몽룡");
hm.put("c", "홍길동");

hm.put("d", "월매");

hm.put("c", "이순신");

System.out.println(hm.get("a"));
System.out.println(hm.get("b"));

 

 

 

3-3. Set, Iterator - 키뭉치

키뭉치를 가져오고 그걸로 데이터를 가져올수 있다.

Set<String> keys = hm.keySet();
System.out.println(keys.toString());

먼저 위와 같이 keys에 키 뭉치를 담는다.

출력하면 아래와 같이 키 값들이 출력된다.

 

키 값들이 담긴 keys 사용해서 두가지 방법으로 데이터를 가져올 수 있다.

 

(1) 향상된  for문 사용

// key 뭉치 -> value들 가져오기
for(String key : keys) {	// 키 뭉치 가져오기
    System.out.println(key + ":" + hm.get(key));
}

(2) iterator  사용

// iterator 사용해서 키 뭉치로 값 가져오기
Iterator<String> i = keys.iterator();
while(i.hasNext()) {
    String key = i.next();
    System.out.println(key + ":" + hm.get(key));
}

Iterator를 사용할 땐 Iterator객체를 하나 선언하고, 거기에 keys.iterator()를 담아야한다.

 

 

 

3-4. Collection - 값 뭉치

// Collection 사용해서 값 뭉치로 값 출력하기
Collection<String> values = hm.values();
for(String value: values) {
    System.out.println(value);;
}

 

 

 **전체 코드**

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMapEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashMap<String, String> hm = new HashMap<String, String>();
	
		hm.put("a", "박문수");
		hm.put("b", "이몽룡");
		hm.put("c", "홍길동");
		
		hm.put("d", "월매");
		
		hm.put("c", "이순신");
		
		System.out.println(hm.size());
		System.out.println(hm.toString());
		
		System.out.println(hm.get("a"));
		System.out.println(hm.get("b"));
		
		// key 뭉치 -> value들 가져오기
		Set<String> keys = hm.keySet();
		System.out.println(keys.toString());
		
		for(String key : keys) {	// 키 뭉치 가져오기
			System.out.println(key + ":" + hm.get(key));
		}
		
		
		// iterator 사용해서 키 뭉치로 값 가져오기
		Iterator<String> i = keys.iterator();
		while(i.hasNext()) {
			String key = i.next();
			System.out.println(key + ":" + hm.get(key));
		}
		
		// Collection 사용해서 값 뭉치로 값 출력하기
		Collection<String> values = hm.values();
		for(String value: values) {
			System.out.println(value);;
		}
		
		
		hm.remove("a");	// a 키를 지운다.
		
		System.out.println(hm.toString());
	}

}

 

 

 

 

 

3-5.  키, 값  쌍으로 가져오기

키와 값을 쌍으로 가져올 수도 있다.

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();

while(entryIterator.hasNext()) {
    Map.Entry<String, Integer> entry = entryIterator.next();
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println("\t" + key + " : " + value);

}

위처럼 Set 클래스를 사용하고 generic으로 Map.Entry<String, Integer> 인 쌍 타입을 사용한다.

Iterator 는 위에서와 같이 구하고자 하는 키, 값 쌍의 타입인 Map.Entry<String, Integer>로 generic을 설정한다.

 

키, 값 쌍의 타입이 Map.Entry<String, Integer> 라는 것이 포인트다.

 

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

public class HashMapExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// map 컬렉션 생성
		Map<String, Integer> map = new HashMap<String, Integer>();
	
		// 객체 저장
		map.put("신용권",85);
		map.put("홍길동",90);
		map.put("동장군",80);
		map.put("홍길동",95);
		
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
		
		while(entryIterator.hasNext()) {
			Map.Entry<String, Integer> entry = entryIterator.next();
			String key = entry.getKey();
			Integer value = entry.getValue();
			System.out.println("\t" + key + " : " + value);
			
		}
		
		System.out.println();
	}

}

 

3-6.  관련 예제

 

 Map<Student, Integer> 로 Student 클래스를 제너릭 쌍 하나로 사용하였다.

public class Student {
	public int sno;
	public String name;
	
	public Student(int sno, String name) {
		this.sno = sno;
		this.name = name;
	}


	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Student)
		{
			Student student = (Student) obj;
			return (sno == student.sno) && (name.equals(student.name));
		}else {
			return false;
		}
	}

	
	@Override
	public int hashCode() {
		return sno + name.hashCode();
	}
	
	
}

import java.util.HashMap;
import java.util.Map;

public class HashMapExample2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<Student, Integer> map = new HashMap<Student, Integer>();
		
		map.put(new Student(1,"홍길동"), 95);
		map.put(new Student(1,"홍길동"), 95);
		
		System.out.println("총 Entry 수: " + map.size());
	}

}

 

 

4. Properties

▷p748

map 계열이다.

put과 generic이 없는 것이 특징이다.

 

4-1.  선언

Properties props = new Properties();

generic이 없기 때문에 위와 같이 선언한다.

 

 

4-2.  setProperty() ,  getProperty()

put 이 없고 setProperty()로 데이터를 넣는다.

import java.util.Enumeration;
import java.util.Properties;

public class PropertiesEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// generic (X)
		Properties props = new Properties();
		// map에서의 put 대신
		// setProperty로 데이터를 넣는다.
		props.setProperty("timeout","30");
		props.setProperty("language","kr");
		props.setProperty("size","10");
		
		System.out.println(props.toString());
		
		System.out.println(props.getProperty("size"));
		System.out.println(props.getProperty("language"));
		
		// Enumeration(Iterator)
		Enumeration e = props.propertyNames();
		while(e.hasMoreElements()) {
			System.out.println((String)e.nextElement());
		}
	
	}

}

 

 

 

4-3.  시스템 환경 설정 조회 - System.getProperties()

import java.util.Properties;
import java.util.Set;

public class PropertiesEx02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 시스템의 환경 설정
		Properties props = System.getProperties();
		Set keys = props.keySet();
		
		for(Object obj : keys) {
			String key = (String)obj;
			System.out.println(key + " : " + System.getProperty(key));
		}
	}

}

 

 

 

 

5. Stack

▷p767

스택

       수식계산, 수식 괄호 검사

       undo/redo

       브라우저 뒤로/앞으로

       인쇄

       버퍼

 

5-1.  push(), pop(), size()

pop()은 데이터를 리턴한다.

import java.util.Stack;

public class StackEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Stack<String> stack = new Stack<String>();
		
		stack.push("박문수");
		stack.push("홍길동");
		stack.push("이몽룡");
		stack.add("월매");	// push와 add 둘다 가능
		
		System.out.println(stack.toString());
		System.out.println(stack.size());
		
		System.out.println(stack.pop());
	
		
		System.out.println(stack.toString());
		System.out.println(stack.size());
	
	}

}

 

5-2.  객체 담기

public class Coin {
	private int value;
	
	public Coin(int value) {
		this.value = value;
	}
	
	public int getValue() {
		return value;
	}
}
import java.util.Stack;

public class StackExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Stack<Coin> coinBox = new Stack<Coin>();
		
		coinBox.push(new Coin(100));
		coinBox.push(new Coin(50));
		coinBox.push(new Coin(500));
		coinBox.push(new Coin(10));
		
		while(!coinBox.isEmpty()){
			Coin coin = coinBox.pop();
			System.out.println("꺼내온 동전 : " + coin.getValue() + "원");
		}
	}

}

isEmpty()를 사용해서 모든 데이터를 가져왔다.

 

 

 

 

6. Queue

queue는 원래 인터페이스로서 linked list가 queue로 만들어졌다.

 

6-1.  offer(), poll(), size()

스택의 push = 큐의 offer

스택의 pop = 큐의 poll

import java.util.LinkedList;
import java.util.Queue;

public class LinkedListEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Queue<String> queue = new LinkedList<String>();
		
		queue.offer("홍길동");
		queue.offer("박문수");
		queue.offer("이몽룡");
		
		System.out.println(queue.toString());
		System.out.println(queue.size());
		
		System.out.println(queue.poll());
		
		System.out.println(queue.toString());
		System.out.println(queue.size());
		
		while(!queue.isEmpty()) {
			System.out.println(queue.poll());
			
		}
	}

}

 

6-2.  객체 담기

public class Message {
	public String command;
	public String to;
	
	public Message(String command, String to) {
		// TODO Auto-generated constructor stub
		this.command = command;
		this.to = to;
	}
}
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Queue<Message> messageQueue = new LinkedList<Message>();
		
		messageQueue.offer(new Message("sendMail", "홍길동"));
		messageQueue.offer(new Message("sendSMS", "신용권"));
		messageQueue.offer(new Message("sendKakaotalk", "홍두께"));
		
		while(!messageQueue.isEmpty()) {
			Message message = messageQueue.poll();
			switch(message.command) {
			case "sendMail":
				System.out.println(message.to + "님에게 메일을 보냅니다.");
				break;
			case "sendSMS":
				System.out.println(message.to + "님에게 SMS을 보냅니다.");
				break;
			case "sendKakaotalk":
				System.out.println(message.to + "님에게 카카오톡을 보냅니다.");
				break;
			}
		}
	}

}

 

 

7. Format 

▷p543

어떤 형식으로 읽을건지 정해준다. 문자열로도 가능해서 몰라도된다.

double num = 1234567.89;
		
DecimalFormat df = new DecimalFormat("0.0");	// 어떤 형식으로 읽을 거야
System.out.println(df.format(num));

이렇게 선언하고 

만약 소숫점 아래자리 형식을 넘으면 반올림하고, 정수 자리가 넘치면 0으로 채운다.

 

다음 전체 코드를 보자.

import java.text.DecimalFormat;

public class FormatEx01 {

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

		double num = 1234567.89;
		
		DecimalFormat df = new DecimalFormat("0.0");	// 어떤 형식으로 읽을 거야
		System.out.println(df.format(num));
		
		// 반올림
		df = new DecimalFormat("00000000.0");
		System.out.println(df.format(num));
	}

}

 

7-1. 관련 예제

1) 메세지 포멧

import java.text.MessageFormat;

public class MessageFormatExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String id = "java";
		String name = "신용권";
		String tel = "010-123-5678";
		
		String text = "회원 ID: {0} \n회원 이름: {1} \n회원 전화: {2}";
		String result1 = MessageFormat.format(text, id, name, tel);
		System.out.println(result1);
		System.out.println();
	}

}

 

2) 날짜 포멧

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Date now = new Date();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("yyyy.MM.dd a HH:mm:ss");
		System.out.println(sdf.format(now));

		sdf = new SimpleDateFormat("오늘은 E요일");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("올해의 D번째 날");
		System.out.println(sdf.format(now));

		sdf = new SimpleDateFormat("이달의 d번째 날");
		System.out.println(sdf.format(now));

	}

}

 

 

 

여기까지 임시데이터의 collection이다.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

NIO 기반 입출력 및 네트워킹


1. 디렉토리/파일 선언

import java.io.File;

public class FileEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// java.io.File
		// 파일이나 디렉토리(없으면 - 생성/ 있으면 - 관리)
		
		// 디렉토리 - 절대경로
		File f1 = new File("c:\\java");	//windows
		File f2 = new File("c://java");	//unixs
		
		// 파일
		File f3 = new File("c:\\java\\text.txt"); //windows
		File f4 = new File("c:/java/text");       //unixs
		
		//상대경로
		File f5 = new File("./java");
	}

}

 위처럼 window와 unix는 비슷하지만 다른 경로 형식을 사용한다. 

window - \

unix - /

 

2. 메서드

  • exist() : 디렉토리/파일 존재 유무
  • mkdir() : 디렉토리 생성
  • createNewFile() : 파일 생성
  • getName() : 디렉토리/파일 명
  • getParent() : 상위 폴더
  • getPath() : 파일경로
  • isHidden() : 숨김파일인지 아닌지
import java.io.File;
import java.io.IOException;
import java.util.Date;

public class FileEx02 {

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

		// File f1 = new File("c:\\java");
		File f1 = new File("c:\\java\\test.txt");
		
		// 유무
		if(f1.exists()) {
			System.out.println("있음");
		}else {
			System.out.println("없음");
		}
		
		// 디렉토리 생성 / 파일 생성

		File f2 = new File("c:\\java\\dir1");
		// make directory
		if(f2.mkdir()) {
			System.out.println("생성 완료");
		}
		

		File f3 = new File("c:\\java\\test2.txt");
		// make directory
		try {
			if(f3.createNewFile()) {
				System.out.println("생성 완료");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(f3.getName());
		System.out.println(f3.getParent());
		System.out.println(f3.getPath());
		
		// canExcute / canRead / canWrite
		// isHidden
		// isAbsolute
		
		if(f3.isHidden()) {
			System.out.println("숨김파일 입니다.");
		}else {
			System.out.println("일반파일 입니다.");
		}
		
		// length()
		// lastModified()
		File f4 = new File("c:\\java\\java.7z");
		long filesize = f4.length();
		System.out.println(filesize + " byte");
		System.out.println(filesize/1024 + " Kbyte");
		
		// API
		long fileDate = f3.lastModified();	// 밀리세커드 값으로 나온다.
		Date date = new Date(fileDate);
		System.out.println(date.toLocaleString());
	}

}

 

 

3. 파일 리스트

먼저 아래와 같이 파일을 선언하고

listFiles() 메서드를 사용하여 파일리스트를 File타입의 배열에 담는다. 

File f = new File("c://Java");
File[] fileLists = f.listFiles();

 

만약 파일이 디렉토리일 경우 []안에 출력하고 아니면 그냥 출력한다.

import java.io.File;

public class FileEx03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		// 디렉토리 - 파일/디렉토리의 목록
		
		// list		 : String[]
		// listFiles : File[]
		
		File f = new File("c://Java");
//		String[] lists = f.list();
//		for(String list : lists) {
//			System.out.println(list);
//		}
		
		File[] fileLists = f.listFiles();
		for(File fileList : fileLists) {
			if(fileList.isDirectory()) {
				System.out.println("["+ fileList.getName() + "]");
			}
			else {
				System.out.println(fileList.getName());				
			}
		}
	}

}

 

 

 

728x90
Comments