자바 디렉토리 삭제하기(Delete a non-empty directory in JAVA)

자바에서 파일을 삭제하려면 File 클래스에서 delete() 메소드를 사용하면 된다.

File file = new File("pathname");
file.delete();


하지만 delete() 메소드는 해당 path 가 디렉토리일 경우 디렉토리가 비어 있을때만 삭제가 된다. 디렉토리 안에 파일이나 하위 디렉토리가 있을 때 삭제하려면 다음과 같이 recursive 메소드를 사용해서 삭제할 수 있다.

import java.io.File;


class DeleteDir {
	public static void main(String args[]) {
		deleteDirectory(new File(args[0]));
	}
	
	public static boolean deleteDirectory(File path) {
		if(!path.exists()) {
			return false;
		}
		
		File[] files = path.listFiles();
		for (File file : files) {
			if (file.isDirectory()) {
				deleteDirectory(file);
			} else {
				file.delete();
			}
		}
		
		return path.delete();
	}
}


JAVA: Random API 랜덤 사용하기

자바에서 랜덤한 숫자를 생성하는데는 두 가지 방법이 가능하다.
하나는 java.util.Random 클래스를 사용하는 것이고, 다른 하나는 Math.random() 메소드를 사용하는 것이다.

Random 클래스는 편리하게 random numbers 를 생성할 수 있으나, Object 를 생성해야 하는데 이것이 불편할 경우도 있을 수 있다. 이와는 대조적으로 Math.random() 메소드는 단순히 double 형태의 난수만 생성할 수 있다.


java.util.Random class

Random 클래스를 사용하기 위해서는 다음과 같은 import 구문 중 하나를 사용해야 한다.

import java.util.Random; // Random class만 사용하는 경우
import java.util.*;      // java.util package 모두 사용


<Random 생성자>
Random r = new Random();          // Default seed comes from system time.
Random r = new Random(long seed); // For reproducible testing


<Random 메소드>

아래는 랜덤 숫자를 얻기 위한 가장 일반적인 메소드들이다.
int i = r.nextInt(int n) //Returns random int >= 0 and < n
int i = r.nextInt() //Returns random int (full range)
long l = r.nextLong() //Returns random long (full range)
float f = r.nextFloat() //Returns random float >= 0.0 and < 1.0
double d = r.nextDouble() //Returns random double >=0.0 and < 1.0
boolean b = r.nextBoolean()  //Returns random double (true or false)



<Example: 임의의 Color 생성하기>

0 ~ 255 사이의 RGB 값을 이용한 Color 만들기
Random r = new Random();
Color  c = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));

RGB 값이 모두 nexInt(256) 같은 메소드를 호출하여 생성되지만, 각각은 독립적인 임의의 값이 된다.


<Example: 1 부터 6 까지의 숫자 만들기 >

nextInt(6) 메소드론 0 ~ 5 까지의 숫자만을 얻을 수 있기 때문에 1 ~ 6 까지의 숫자를 얻기 위해서는 1 을 더해야 한다.
Random r = new Random();
int ranNum = r.nextInt(6) + 1;



Math.random() method

Math.random() 메소드는 0.0 보다 같거나 크고, 1.0 보다 작은 double 형태의 수를 return 한다.
이는 Random Class 의 nextDouble() 메소드와 같은 결과 값이다.
아래 예문을 보자.

double x;
x = Math.random(); 

보통 0.0...0.999999 범위의 값은 잘 사용하게 되지를 않는다. int 값을 얻을려면 casting 이 필요하다.
아래 1 ~ 10 값을 구하는 예문을 보자.

int n = (int)(10.0 * Math.random()) + 1;

10 을 곱함으로써 0.0 ~ 9.9999+ 사이의 값을 얻을 수 있고 int 로 casting 함으로써 0 에서 9 까지의 값을 얻을 수 있다(소수점 이하의 수는 반올림이 아니고 버림이다).
마지막으로 1 을 더함으로써 1 에서 10까지의 난수를 얻게 된다.


[Bash] cd 명령 후 디렉토리 내용 표시하기(ls)

쉘을 사용하다보면 디렉토리를 이동한 후에(cd) 항상 습관적으로 디렉토리 내용을 확인하게 된다(ls).

alias cd 'cd \!* ; setp; ls'

c쉘을 사용할 때는 위와 같이 설정해서 원하는 결과를 얻었다. 하지만 bash 는 제대로 알고 있는 것인지 모르겠지만, alias 에서 입력 파라메터를 받지 못하는 문제가 있어서 alias 로는 구현이 불가능했다.

그래서 function 을 이용하는 방법을 찾아봤다. 계정 홈 디렉토리에서 .bashrc 파일에 아래와 같은 내용을 추가하면 된다.

function cd { builtin cd $* && pwd && ls -CF; }


덤으로 pwd 도 넣었다 :)