TIL | 06.17의 기록
key,value를 가지고 있는 클래스에서 value 내의 한가지 값을 기준으로 정렬하는 방법
compare(a,b) : 0-> 교환안함, 양수->교환, 음수->교환안함
class CompareNumAsc implements Comparator<MemberVO>{
@Override
public int compare(MemberVO v1, MemberVO v2) { //비교
//0 ->교환안함
//양수 1200-1000 -> 200 -> 교환
//음수 1000-1200 -> -200 -> 교환안함
return (v1.getNo()<v2.getNo())? -1 : (v1.getNo()>v1.getNo())? 1 : 0 ;
//sort: -1(음수),0이면 놔두고 1(양수)이면 정렬
}
}
class CompareNumDesc implements Comparator<MemberVO>{//제너릭은 데이터가 담겨있는 객체명를 적는다
@Override
public int compare(MemberVO v1, MemberVO v2) {
//교환하려면 양수값을 준다, 교환안하려면 음수,0
return (v1.getNo()<v2.getNo())? 1 : (v1.getNo()>v2.getNo())? -1 : 0 ;
}
}
class CompareUsernameAsc implements Comparator<MemberVO>{
@Override
public int compare(MemberVO v1, MemberVO v2) {
return v1.getUsername().compareTo(v2.getUsername()); //compareTo :String비교
}
}
class CompareUsernameDesc implements Comparator<MemberVO>{
//comparator 상속받아야 한다
@Override
public int compare(MemberVO v1, MemberVO v2) {
// 이순신 홍길동 => 음수 (교환안함)
return v2.getUsername().compareTo(v1.getUsername());
}
}
제너릭을 작성안하면 기본값은 Object이 된다. Object형은 다양한 것을 대입 가능하지만 하위값을 Object에 넣었다가 다시 원래 타입으로 꺼낼 때 본래 타입으로 형변환을 해야한다.
제너릭을 사용하면 원하는 데이터, 객체 타입을 통일 가능하다.
제너릭 사용 방법 : public class ExampleGeneric<T>
클래스를 정의할때 클래스명 옆에 <>안에 임의의 기호 아무거나 작성. 그 클래스 내의 변수나 메소드를 정의할 때 데이터타입을 모두 T로 작성하면 된다.
입력: Input(byte), Reader(문자)
출력 : Output(byte), Writer, Print(문자열)
Buffer : 임시저장공간
Stream : 데이터가 지나가는 길
InputStream in = System.in; //객체생성
/* read() 사용
while(true) {
int inData = in.read(); //-1 : 읽은값이 없을때
if(inData==-1) break;
System.out.println((char)inData); //10진수를 문자로 형변환
} */
/* read(byte[] a) 사용*/
byte data[] = new byte[10];
int cnt = in.read(data); //cnt -> 읽어낸 byte수 리턴 (엔터는 2바이트)
System.out.println("cnt->"+cnt);
System.out.println("text->"+ new String(data,0,cnt-2)); //바이트배열을 문자로 리턴(리턴범위지정가능)
//비어있는 배열은 null(0)값으로 리턴
InputStreamReader isr = new InputStreamReader(System.in); //객체생성
char[] inData = new char[10];
int cnt = isr.read(inData);
System.out.println("cnt->"+cnt);
System.out.println(new String(inData,0,cnt));
System.out.println(String.valueOf(inData,0,cnt)); //char배열을 문자열로 변환
나머지 사용법은 InputStream과 동일하다.
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// 읽은 데이터가 없을 때 null을 리턴해준다.
String str = br.readLine(); //한줄씩 읽어온다
System.out.println(str);
// File(String pathname)
File f1 = new File("C://");
File f2 = new File("C://dev2/student");
File f3 = new File("C://dev/Test.java");
// File(File parent, String child)
File f4 = new File(f2, "Test.java"); //->f3과 같은 파일을 객체로 만든것
// File(String parent, String child)
File f5 = new File("c:/dev","Test.java");
exists
: 경로 또는 파일 존재 유무
mkdir()
mkdirs()
: 폴더 생성 (결과값 boolean)
createNewFile
: 파일 생성
getName()
: 파일명 구하기
getParent()
: 드라이브명 + 폴더명 구하기
getPath()
getAbsolutePath()
: 드라이브명 + 폴더명 + 파일명 구하기
listRoots()
: 드라이브 목록 구하기
length
: 파일의 크기 구하기 (byte)
delete
: 파일 삭제 (복구 불가능)
File f = new File("C://workspaceJava/basic06_io/src/basic06_io/FileTest.java");
FileReader fr = new FileReader(f);
/*
while(true) {
int inData = fr.read();
if(inData==-1) break;
System.out.print((char)inData);
} */
BufferedReader br = new BufferedReader(fr);
while(true) {
String inData = br.readLine();
if(inData== null) break;
System.out.println(inData);
}