집 PC로 홈페이지를 만들기

집에 놀고 있는 MAC Mini로 개인파일 서버와 SVN, Maven 서버등을 구축해서 외부 일하면서 사용해왔다.

 

IP야 공유기를 이용하고 있어 사용 해왔지만 머리가 나빠서 그런지 IP주소를 맨날 까먹더라 그래서 IpTime을 이용해서 DDNS를 사용 해왔는데 그도 귀찮기 시작하더라 URL이 XXX.iptime.org로 되어 있어 보기 나쁘더라...

 

프로잭트 Spring 세팅 하는데 Maven 주소지가 iptime.org라 적기 창피 하다 해야 하나 그런다고 서버를 이때문에 얻어 쓰기도 아깝더라 그런중에 생각외의 방법이 눈에....

 

가비아에서 XYZ 도메인을 1400원에 행사를 하고 있어서 지르고 집에 유동아이피에 설정을 했더니 헉 접속이 되더라....

 

참고 참고....

 

설정 법은 네임 플러스? 그거로 해야 적용이 되는듯...

'Job > Server' 카테고리의 다른 글

집 PC로 홈페이지를 만들기  (0) 2015.11.24
아마존 AWS EC2  (0) 2015.08.26

아마존 AWS EC2

오늘 아마존에 개인용 서버를 하나더 늘리면서 생각나서 포스팅 해본다.

 

EC2는 아마존에서 설명하기는 아래와 같다.

 

Amazon Elastic Compute Cloud(Amazon EC2)는 클라우드에서 컴퓨팅 파워의 규모를 자유자재로 변경할 수 있는 웹 서비스입니다. 개발자가 보다 쉽게 웹 규모의 클라우드 컴퓨팅 작업을 할 수 있도록 설계되었습니다.

Amazon EC2의 간단한 웹 서비스 인터페이스를 통해 간편하게 필요한 용량을 얻고 구성할 수 있습니다. 컴퓨팅 리소스에 대한 포괄적인 제어권을 제공하며, Amazon의 검증된 컴퓨팅 인프라에서 실행할 수 있습니다. Amazon EC2는 새로운 서버 인스턴스를 획득하고 부팅하는 데 필요한 시간을 단 몇 분으로 단축하므로 컴퓨팅 요구 사항의 변화에 따라 신속하게 용량을 확장하거나 축소할 수 있습니다. 또한 실제 사용한 만큼만 요금을 지불하면 되므로, 컴퓨팅 비용이 절약됩니다. Amazon EC2는 오류 발생 시 복원력이 뛰어난 애플리케이션을 구축하고 일반적인 오류 상황을 피할 수 있는 도구를 제공합니다.

라고 설명 하고 있다. 어렵게 Elactics 어쩌구 써져 있는거로 보면 어려워 보이지만 자신들이 아마존 사이트를 운영하며 가지고있는 엄청난 양의 서버를 활용하여 그 서버내에 가상으로 나눠 주겠다는 취지로 시작한 사업으로 알고 있다. 아주 쉽게 설명하면 가비아 같은 사이트에서 호스팅 서버를 임대 하는것과 비슷하다. 비용은 서버 사이즈마다 트래픽 양에 따라 금액을 지불 하는것과 같다. 다만 국내 사이트보다 저렴한편에 있으며 여러 서비스를 제공하고 있다.

 

SK나 KT에서도 동일한 서비스를 제공하고 있지만 가격 면에서 EC2가 좋다는 생각이 들긴한다.

하지만 문제나 대규모를 사용 하는 경우는 유리한 면도 없지 않다.

 

SKT 클라우드 서비스 초창기에 SNS서비스 개발로 서버를 DB서버 와 WAS 서버를 포함 10대정도와 이지 스토리지 등 많은 서비스를 사용 했었다. SKT가 초창기 이고 클라우드 서비스가 생각보다 사용자기 많지 않았던 때라 그런지 많은 지원을 해줬다....

 

장애가 발생대응이 빠르고 최대한 지원을 해주는 점은 장점으로 발위할수 있다. 하지만 가격이 비싸고 아마존의 장점인 프리티어와 같은 체험할수 있는 기능이 없다는 부분이 크게 다가온다.

 

아는 지인은 EC2에 무료 티어에 Node js를 활용하여 무료로 서비스 사업을 하는 친구도 있다.

 

서버 관리를 못하는 사람들로는 서버 비용만 억대가 넘는 엄청난 비용 폭탄에 허덕일수도 있다.

 

선택은 뭐가 꼭 좋다고 할수는 없지만 활용을 어찌 하느냐에 따라서 크게 달라지겠지만 소규모로 한다면 AWS 무료 티어 0.5코어짜리 ㅠㅜ 를 사용 하는것도 나쁘지 않다 특히나 공부를 위해 서버가 필요하다면...

'Job > Server' 카테고리의 다른 글

집 PC로 홈페이지를 만들기  (0) 2015.11.24
아마존 AWS EC2  (0) 2015.08.26

adb 화면 캡쳐

adb screencap -p /url

 

ex> screencap -p /sdcard/Download/screen1.png

'Job > Android' 카테고리의 다른 글

adb 화면 캡쳐  (0) 2015.08.24
Android 비행기 모드  (0) 2015.03.10

C# 메크로 준비

지난번에 Mounse_event 만들면서 일단 기능 하나 하나씩 만들어보자 생각하고 지메크로를 만들자는 생각이 들어서 비슷한놈 하나 만들어 보자 싶어 만들 기능 하나 하나 붙여 볼까 생각중이다.....

 

지메크로 기능들을 하나 하나 뽑아 보자.....

 

1. 마우스 컨트롤

    1) 이동

    2) 왼쪽 클릭

    3) 왼쪽 누른상태

    4) 땐 상태

    5) 오른쪽 클릭

    6) 오른쪽 누른상태

    7) 좌표

    8) 단축키 좌표 찾기

 

2. 키보드 컨트롤

    1) 저장 키보드 사용

 

3. 딜레이 설정.

 

크게 이 3가지 기능에 시작과 종료 HotKey

 

반복 등 기능들이 있다.

 

하루에 한두가지씩 기능들 구연해서 크게 봐서는 마우스 컨트롤 쪽은 지난번에 포스팅 했던 Mouse_Event로 마우스 컨트롤 부분은 대충 끝날것 같다 생각이 들고 일단 쓸만하게 UI 만져 만들어 줘야 할것 같다....

 

간단할것 같으면서도 생각보다 많은 변수가 있지 않을까 싶다....

 

지메크로 기능 완성하고 나면 다음으로 화면 Fixel체크 해서 조금더 상위의 오토를 만들수 있지 않을까 생각하며....

 

공부 공부다.... ㅋㄷㅋㄷ

'Job > C#' 카테고리의 다른 글

C# 메크로 준비  (0) 2015.06.05
C# mouse_event  (0) 2015.06.02
C# 메크로 관련 공부 시작  (0) 2015.06.01

C# mouse_event

간단하게 마우스 클릭 이동 등등의 이벤트를 해보았다. 마우스 이동 클릭 등등.
 
일단 처음이다 보니 우리의 친구 구글링을 하면서 많은 것을 찾아 봤는데 왜 다들 올려준 간단 코드는 안 돌아 가는 건지 ㅎㄷㄷ 짜증....
 
이런저런 많은 방법 쓰다가 드디어 돌아가는 방법을 찾아서 공유를 해본다.
 
일단 MSDN을 봐도 있고 어딜 가든 흔하게 적혀 있는 flags다.
 
 
왼쪽 down : 0x00000002
왼쪽 up: 0x00000004
 
오른쪽 down  : 0x00000008
오른쪽 up : 0x000000010
 
x, y mouse의 위치 값을 포함하여 event를 발생함 : 0X8000
x, y에 지정한 위치로 이동 : 0x0001
 
아래는
//선언 부 mouse event를 사용하기 위한 선언 부이다.
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, int dwData, int dwExtraInfo);

일단 마우스 클릭을 테스트 한결과 사람들 말로는 x,y 값만 넣어서 마우스 다운,업 아래와 같이 사용 하면 돌아 간다 하는데 왜 난 안 돌아갈까? 그냥 그 자리에서 클릭만 하는 건지..... 그때 사용 했던 코드다.

 mouse_event(0x0002 | 0x0004, 100, 100, 0, 0);
 
화면기준 100, 100부분을 좌 클릭 하라 명령 보냈는데 안 돌더라 ㅠㅜ
요기서 한참 고생 했다....
 
그래서 찾은 방법이 마우스를 이동 시키는 기능을 넣어 보자 싶어
 
//해당 위치로 이동하도록 명령어 실행 하고 클릭을 하도록 했다.
mouse_event(0X8000 | 0x0001, 100, 100, 0, 0);
mouse_event(0x0002 | 0x0004, 0, 0, 0, 0);//좌 클릭
 
하지만 왜 x, y좌표로 이동을 안 하지? 헐 젠장....
 
그래서 더 찾아 보니 모니터 사이즈 어쩌고 저쩌고 젠장
 
다시 변경
mouse_event(0X8000 | 0x0001, (65535 / 1920) * 100, (65535 / 1080) * 100, 0, 0);//마우스 이동
mouse_event(0x0002 | 0x0004, 0, 0, 0, 0);//좌 클릭
 
(65535 / 1920) * 100, (65535 / 1080) * 100
이 부분이 중요하다
저 65535는 뭔지 모르겠지만 저 값에 모니터 해상도 X, Y를 각각 나눠 준 값에 가고 싶은 X,Y 좌표로 곱하면 그 자리로 정확하게 가더라....
 
이제 돌아간다 참 쉽다잉 왜 난 2시간 동안 삽질을 한 건지 이해를 못하겠다 ㅠㅜ...

오늘 끝나서 바로 올렸지만 수정해서 다시 올려 보겠다 ㅎㅎㅎㅎ
 
기분 완전 좋다잉

'Job > C#' 카테고리의 다른 글

C# 메크로 준비  (0) 2015.06.05
C# mouse_event  (0) 2015.06.02
C# 메크로 관련 공부 시작  (0) 2015.06.01

C# 메크로 관련 공부 시작

간단한 메크로 만들때 G-메크로 사용하다.. 조금더 확실한 처리를 하기 위해 C#으로 뭔가 해볼 생각에 시작을 하며 한두개씩 사용 하는 API들 공유 시작 할까 한다.

 

G-메크로 사용하다 손쉽고 많은 기능들 사용 할수 있는 프로그램들이 많이 존제 하는것을 봤다 고딩때 메크로 익스프레스 사용 해본거 말고는 사용 한적이 없어서......

 

처음 찾다 보니 오토핫키, 오토잇등이 많이 사용 하더라....

 

그래도 명색 프로그래머인데 C++ 기반으로 만들어진 툴들을 사용할수 없다 생각이 들어 C#으로 공부 하면서 만들어볼 생각이다.

오토핫키:

http://www.autohotkey.com/

 

오토잇:

http://www.autoitscript.com/

 

메크로 익스프레스는 대학교때 대항해시대 그 치열한 구입하기 할때 잘 써먹어서 편하게 사용은 해봤었는데 그정도 까지만 생각을 했었다 프로그램으로 밥벌어 먹으면서 이런 불편함을 손으로 하고 있다는것이 조금은 창피 해서 차라리 배워서 쓰자 싶어 공부 하는 내용 공유 슬근 슬근 해볼까 한다 ㅎㅎㅎㅎㅎ

 

주변 사람들이 흔하게 사용하는 몬길 오토 정도는 만들어야 하지 않을까 싶어서 MFC는 대학교 2학년때 회계 프로그램 팔아 먹을때 첫 직장에서 핸드폰 싱크 프로그램 유지 보수 할때 C#은 대학교 3학년때 소공때 말고는 사용해본 역사가 없어 조금은 갑갑하게 진행 할것 같지만 뭐 객체 지향 언어에 C등 밥 벌어 먹는 사람 입장으로 이것하나 못하겠냐 싶어서 그냥 덤벼 본다 멘땅에 해딩과 우리게는 MSDN이 있으니까... ㅋㄷㅋㄷ

'Job > C#' 카테고리의 다른 글

C# 메크로 준비  (0) 2015.06.05
C# mouse_event  (0) 2015.06.02
C# 메크로 관련 공부 시작  (0) 2015.06.01

jsoup 쓰며 기억용 sample

//<a/> href 값 추출

Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36")
                .timeout(0).followRedirects(true).execute().parse();

 

Elements titles = doc.select("a[href]");

 

for(org.jsoup.nodes.Element e: titles){

System.out.println("URL["+e.attr("abs:href")+"]");

}

 

나머지는 해당 Tag값 스페이스로 묶어도 상관 없음.

 

MAVEN :

<dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.7.2</version>
</dependency>

 

버전은 알아서 검색.

 

html 파싱하기 생각보다 엄청 편해서 쓸만함

Android 비행기 모드

Android 4.2 버젼부터 비행기 모드를 app에서 컨트롤 할수 없다라는 서두로 시작을 하겠다.

 

구글링에서 찾은 자료중에 이런것도 있고.

http://stackoverflow.com/questions/26356953/how-do-i-disable-airplane-mode-tablet-supports-4-4-2

 

이것 말고도 많은 자료들을 보면 없는듯 하다.

 

죽어라 구글링 한결과 일단은 루트권한 없이 성공한사람은 없는듯 하다.

 

나도 회사폰을 들고 집에 가면 새벽에 쓸모 없는 푸쉬들 부터 어떨때는 전화도 오더라 일할때야 글타 치더라도 집에 가서 까지 단말기에 대한 스트레스를 덜고자 일정 시간대 자동으로 비행기 모드로 바꾸도록 해보려 했다....

 

글타고 airplain mode로 바꾸자고 회사 테스트용 폰을 루틴할순 없는거고 포기는 했지만 그래도 끄적여 본다.

 

일단 루틴을 했다는 생각으로 adb 명령어로 접근 하는 방법을 찾아서 해보니 되긴 한다. 아주 잘된다.

 

 

비행기 모드 ON

 

settings put global airplane_mode_on 1

am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

 

비행기 모드 OFF

 

settings put global airplane_mode_on 0

am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

 

위와 같은 방식으로는 가능하지만 일단은 루틴을 해야만 가능하다는 것이 문제인것인데.

 

시간날때 조금씩 찾아 보겠지만 구글에서 권한 자체를 읽기 전용으로 바꾼 이상 힘들것으로 보인다.

 

 

'Job > Android' 카테고리의 다른 글

adb 화면 캡쳐  (0) 2015.08.24
Android 비행기 모드  (0) 2015.03.10

vi 명령어 및 사용법 정리

옛날에 아는분이 쓰시는거 보고 오히려 키보드 마우스 같이 사용하던 나로서 너무나 신기하고 빠른 속도에 신기해서 한때 vim을 쓰며 익숙해지려고 Note에 정리 했던것들 끄적여 본다.

 

명령어들 엄청 많기는 하지만 쓰다보면 익숙한것 편한것 몇가지만 사용하게 되서 자주 사용하는 명령어만 정리 해서 끄적여 본다.

 

많은 기능들은 솔직하게 다른 사람들이 정리한것들이 많아서.... ㅎㅎㅎㅎㅎ

 

 

1. 이동명령

 

vi에서 방향키 써도 된다 하지만 방향키를 무엇인가 작성하고 이동하고 수정하고 할때 손이 많이 움직이고 모르는 사람이 봤을때 방향키에 손이 와따가따 하는것보다 큰 움직임 없이 무엇인가 빠르게 움직이고 변하는것을 보는것으로 신기해 하지 않을까?

개발자도 멋나게 보여 보고 싶은거다!!!!

 

키 

설명 

 h

 커서를 현재 위치에서 왼쪽으로 한 글자 옮긴다.

 j

 커서를 현재 위치에서 한 라인 아래로 옮긴다.

 k

 커서를 현재 위치에서 한 라인 위로 옮긴다.

 l

 커서를 현재 위치에서 오른쪽으로 한 글자 옮긴다.

 

 

 

2. 편집 명령어

 

글자를 추가하거나, 기존에 있는 글자를 삭제할 경우에 사용하는 명령어이다. 입력한 내용을 명령어가 아닌 파일에 입력하는 데이터로서 인식하여 ESC를 누를때까지 입력한 모든 내용이 화면에 출력된다. 글자를 지우는 명령어를 사용하면 지운 글자는 임시 레지스터에 저장된다.

 

 

 

설명

i

현재 커서가 있는 곳에 글자를 ESC를 누를 때까지 입력한 글자를 추가한다(insert).

x

현재 커서가 있는 곳의 글자를 지운다.

 

 

3. 종료 명령어

 

중요한 명령어 수정하고 지우고 해봐야 저장 못하고 혹은 vi를 종료 못해서 Ctrl+c로 빠져 나올순 없다.

 

 

키 

 설명

 :w

 현재 편집하는 파일을 저장한다(write).

 :w!

 현재 편집하는 파일을 강제로 저장한다.

 :q

 현재 편집하는 파일을 닫고 vi 에디터를 종료한다(quit).

 :q!

 현재 편집하는 파일을 저장하지 않고 vi 에디터를 종료한다.

:wq

 현재 편집하는 파일을 저장하고 vi 에디터를 종료한다(write & quit).

  :zz  현재 편집하는 파일을 저장하고 vi 에디터를 종료한다.(사용하면서 써본적이 없는것 같다.)



 

4. 이동명령어2

 

단순 방향성이 아닌 Eclipse의 ctrl 방향키등과 비슷한 명령어 들이다.

 

아래 명령이 이외 여러가지가 있지만 솔직히 머리가 나빠서 인지 혹은 익숙하지 않아서 인지 안쓰니까 패스 ㅎㅎㅎ 0,$,w,b 이 4가지 명령어는 아주 빈번하게 사용하는 편이다.

 설명

 w

 커서를 우측 단어의 첫 글자로 옮긴다(Word).

 W

 커서를 우측 단어의 첫 글자로 옮긴다. 단, 단어는 공백으로만 나뉜다(Word).

 e

 커서를 우측 단어의 끝 글자로 옮긴다(End of word).

 E

커서를 우측 단어의 끝 글자로 옮긴다. 단, 단어는 공백으로만 나뉜다(End of word).

 b

커서를 좌측 단어의 첫 글자로 옮긴다(Backward).

 B

커서를 좌측 단어의 첫 글자로 옮긴다. 단, 단어는 공백으로만 나뉜다(Backward).

 0

커서를 라인의 첫 글자로 옮긴다.

 $

커서를 라인의 끝 글자로 옮긴다.

 

5. 편집 명령어2

 

 

키 

 설명

 a

 커서의 우측에 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Append).

 A

 현재 라인의 맨 끝에 ESC를 입력할 때까지 입력한 모든 글자를 추가한다. 숫자 n을 명시하면 n번 반복해서 입력한다(Append)

 I

 현재 라인의 공백이 아닌 첫 글자 앞에서 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Insert).

 o

 현재 라인 밑에 새로운 라인을 열고 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Open).

 X

 현재 커서의 왼쪽 글자를 지운다.

 dpos

 현재 커서부터 pos로 명시한 이동 명령어로 명시한 곳까지 글자를 지운다. 이동 명령어는 어떠한 것이 와도 상관없이, 그 명령어의 의미가 나타는 곳까지 글자를 지운다. 따라서 조합할 수 있는 명령어는 dh,dj,dk,dl,dw,db,de,dW,dB,dE,dH,dM,dL,d0,d^,d$,d-d,+,d_,d| 등 헤아릴 수 없이 많은 명령어를 만들 수 있다(Delete).

 dd

 현재 커서가 위치한 라인을 지운다(Delete).

 D

 현재 커서가 위치한 곳부터 라인의 끝까지 지운다. 앞에 숫자 n이 명시된 경우 현재 라인의 끝까지 지우고 추가로 커서 아래에 있는 n-1 개의 라인을 지워서 레지스터에 넣는다(Delete).

 r

 커서가 위치한 곳의 글자를 다른 하나의 글자로 대체한다(Replace).

 R

 커서가 위치한 곳부터 우측으로 가면서 글자를 대체하는데 ESC를 누를때까지 입력한 개수만큼 기존의 글자가 새로운 글자로 대체된다(Replace).

 ~

 커서에 있는 글자의 대소문자를 서로 바꾼다. 즉 ~를 누를 때마다 커서의 우측으로 옮기면서 커서에 있는 글자가 소문자일 경우는 대문자로, 대문자인 경우는 소문자로 바꾼다.

 yy,Y

 커서가 있는 라인의 데이터를 복사한다.

 p

 마지막으로 지우거나 복사한 데이터를 읽어서 커서의 우측에 데이터를 추가한다(Paste).

 P

 마지막으로 지우거나 복사한 데이터를 읽어서 커서의 좌측에 데이터를 추가한다(Paste).

 u

 마지막에 실행한 편집 명령어를 하나를 취소한다(Undo).

 

 
 

6. 검색 명령어

 

 

 키

설명 

 /pattern

 / 다음에 찾고자 하는 글자의 정규식을 사용해서 패턴 형태로 입력하면 커서의 우측 아래쪽 방향으로 패턴을 찾는다.

 ?pattern

 ? 다음에 찾고자 하는 글자의 정규식을 사용해서 패턴 형태로 입력하면 커서의 좌측 위쪽 방향으로 패턴을 찾는다.

 n

 가장 마지막으로 실행한 검색 명령어를 똑같은 방향으로 실행한다. 마지막 검색이 우측일 경우(/를 사용한 경우)는 우측으로, 좌측일 경우(?를 사용한 경우)는 좌측으로 패턴을 찾는다(Next).

 N

 가장 마지막으로 실행한 검색 명령어를 반대 방향으로 실행한다. 마지막 검색이 우측일 경우(/를 사용한 경우)는 좌측으로, 좌측일 경우(?를 사용한 경우)는 우측으로 패턴을 찾는다(Next).

 

 

7. vi 설정 명령어

 

밑의 명령어를 vi 에디터를 실행할 때마다 적어넣기 불편하므로 vi 에디터의 설정을 저장한 파일

즉, ~/.exrc 파일에 자신에게 적합한 설정 사항을 넣어 두면 매번 따로 설정하는 불편함이 사라진다.

   

키 

 설명

 :set nu

 각 라인 앞에 라인 번호를 붙인다(NUmber).

 :set nonu

 각 라인 앞에 라인 번호를 붙이지 않는다(NO NUmber).

 :set ts=n

 탭의 크기를 n으로 정한다(Tab Stop).

 

 

나도 vi를 잘쓰는건 아니지만 개발하면서 전혀 안쓸순 없는부분이라 위에것중 1/3 만이라도 자주 쓰는거 숙지하면 어려움이 없지 않을까 라는 생각이 든다.

 

vi 처음 접하는 개발자 분들 화이팅 입니다.

 

'Job > Tools' 카테고리의 다른 글

vi 명령어 및 사용법 정리  (2) 2015.02.26

  • Favicon of https://zoahaza.net 조아하자  Edit/Del  Reply

    2015.02.28 23:57 신고

    오... 예전에 C했을때 저런거 좀 하긴 했는데... 요즘은 웹쪽으로 완전 전향하고나서는 저런거 안하게 되네요...;;;

Java로 재미로 Windows DIR 만들기

이번에 용량이큰 3.5인치 외장하드 하나 장만하면서 대학때부터 이리저리 모아두던 외장하드들 3개를 정리해서 한곳으로 모으는 작업을 진행했다.
대학교에서 Embedded쪽을 하겠다고 C,C++만 하던차 Mobile 제조사에 신입으로 들어가 C,C++ 가끔 MFC정도만 하던차 회사가 문을 닫으며 다른곳으로 이직해 처음 Java를하면서
이런저런 쓸모 없는거 신기한거 만들어 보자고 만들기 시작한놈중 지금 보면 부끄러운놈들도 있고 신기한놈들도 있고 해서 한두개씩 올려 볼까 한다.

이건 뭐 누구나 만들수 있는거지만 심심해서 만들었던 놈중에 jar 파일을 exe파일로 변환 시켜주는 Jsmooth던가 그거 써서 만들어 던거라 기억에 많이 남아 한번 포스팅 해본다.

최대한 DIR 명령어랑 비슷하게 하려 했으나 그 이해 못할 귀차니즘이 나를 막아서서 ㅎㅎㅎㅎ

FileSearcher.java 초기 받아 처리 하는 부분
	/*
	 * 탐색기 분기처리
	 */
	public String Searcher(String[] args){
		String result = "";
		String fileName = "";
		String dir = "";
		
		if(args.length<1)
		{
			//현재 디렉터리 정보 표시
			result = ShowDir(dir);
		}else{
			for(int x=0;args.length>x;x++){
				if(!optionVO.isHelp()){
					// 도움말 표기
					if(args[x].equals("/h")||args[x].equals("/H")){
						optionVO.setHelp(true);
						return HELP;
					}
				}
				// 하위 디랙터리 검색 옵션
				if(!optionVO.isOptionSubDir()){
					if(args[x].equals("/a")||args[x].equals("/A")){
						optionVO.setOptionSubDir(true);
					}
				}
				// 디렉터리 옵션 추출
				if(!optionVO.isSearchDir()){
					if(commonUtil.checkDir(args[x])){
						optionVO.setSearchDir(true);
						dir = args[x];	
					}
				}
				// 파일명 옵션 추출
				if(!args[x].equals("/h")&&!args[x].equals("/H")&&!args[x].equals("/a")&&!args[x].equals("/A")&&!commonUtil.checkDir(args[x])){
					optionVO.setSearchFile(true);
					optionVO.setFileLike(commonUtil.checkFileName(args[x]));
					if(optionVO.isFileLike()){
						args[x]=args[x].substring(0,args[x].length()-1);
					}
					fileName= args[x];
				}
			}
			connectioDir.add(dir);
			if(optionVO.isSearchDir()&&!optionVO.isSearchFile()){
				// 파일 검색이 아닌 원하는 위치의 정보 표시
				result = ShowDir(dir);
			}else{
				// 파일 검색
				result = ShowSearchFile(fileName, dir);
			}
		}
		return result;
	}
	
	public String ShowSearchFile(String fileName, String dir) {
		String returnString="";
		long totalLength = 0;
		if("".equals(dir)){
			dir = System.getProperty("user.dir");
		}
		fileInfoVO = Finder(fileName, dir);
		if(fileInfoVO.size()>0){
			for(int x=0 ; fileInfoVO.size()>x;x++){
                                                                (x).getFIlelength())+"\n\n";
				totalLength = totalLength+fileInfoVO.get(x).getFIlelength();
			}
		}else{
			returnString = dir+" 위치에 \""+fileName+"\" 을 찾을수 업습니다";
			return returnString;
		}
		returnString = returnString +"\t전체 파일  :\n\t\t"+Integer.toString(fileInfoVO.size())+"개 파일\t"+commonUtil.fileLength(totalLength);
		return returnString;
	}

파일 검색부분
	/*
	 * 파일 검색
	 */
	public ArrayList< FileInfoVO > Finder(String fileName, String dir) {
		ArrayList< FileInfoVO > InfoVO = new ArrayList< FileInfoVO >();
		File temp = new File(dir);
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd a K:mm");
		File[] files = temp.listFiles();
		try{
			for(int x=0; files.length > x;x++){
				if(!files[x].isDirectory()){
					if(optionVO.isFileLike()){
						if(fileName.equals(files[x].getName().substring(0,fileName.length()))){
							FileInfoVO fileinfo = new FileInfoVO(); 
							fileinfo.setFIlelength(files[x].length());
							fileinfo.setFileName(files[x].getName());
							fileinfo.setFIlePath(files[x].getPath());
							fileinfo.setFilelastModified(files[x].lastModified());
							fileinfo.setSearchPath(dir);
							InfoVO.add(fileinfo);
							System.out.println("\n  "+fileinfo.getSearchPath()+"\t 디렉터리"+"\n\n"
									+formatter.format((new Date(fileinfo.getFilelastModified())))+"\t"+fileinfo.getFileName()+"\t"+commonUtil.fileLength(fileinfo.getFIlelength())+"\n\n");
						}
					}else{
						if(files[x].getName().equals(fileName)){
							FileInfoVO fileinfo = new FileInfoVO(); 
							fileinfo.setFIlelength(files[x].length());
							fileinfo.setFileName(files[x].getName());
							fileinfo.setFIlePath(files[x].getPath());
							fileinfo.setFilelastModified(files[x].lastModified());
							fileinfo.setSearchPath(dir);
							InfoVO.add(fileinfo);
							System.out.println("\n  "+fileinfo.getSearchPath()+"\t 디렉터리"+"\n\n"
									+formatter.format((new Date(fileinfo.getFilelastModified())))+"\t"+fileinfo.getFileName()+"\t"+commonUtil.fileLength(fileinfo.getFIlelength())+"\n\n");
						}
					}
				}else{
					if(optionVO.isOptionSubDir()){
//						if(files[x].canRead()||files[x].canWrite()||files[x].isHidden()){
							connectioDir.add(files[x].getPath());
							InfoVO.addAll(this.Finder(fileName, files[x].getPath()));
//						}
					}
					
				}
			}
			
		}catch (Exception e) {
//			e.printStackTrace();
//			System.out.println(connectioDir.get(connectioDir.size()-2)+"\t에 접근 권한이 없습니다");
			return InfoVO;
		}	
			return InfoVO;
		
	}

파일 경로 출력
	public String ShowDir(String showdir){
		String result = "";
		String dir = "";
		if("".equals(showdir)){
			//디렉터리 조건이 없는경우 현위치 설정
			dir = System.getProperty("user.dir");
		}else{
			dir = showdir;
		}
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd a K:mm");
		ArrayList< FileInfoVO > InfoVO = new ArrayList< FileInfoVO >();
		File temp = new File(dir);
		File[] files = temp.listFiles();
		int dirCnt = 0;
		int fileCnt = 0;
		long fileLength = 0;
		try{
			for(int x=0;x < files.length;x++){
				FileInfoVO fileinfo = new FileInfoVO();
				fileinfo.setFileName(files[x].getName());
				fileinfo.setFilelastModified(files[x].lastModified());
				fileinfo.setFIlelength(files[x].length());
				
				if(files[x].isDirectory()){
					fileinfo.setDir("DIR");
				}else{
					fileinfo.setDir("    ");
				}
				InfoVO.add(fileinfo);
			}
			result = "\n  "+dir+"\t 디렉터리\n\n";
			for(int x=0 ; InfoVO.size()>x;x++){
				result = result+ formatter.format(new Date(InfoVO.get(x).getFilelastModified()))+"\t"+InfoVO.get(x).getDir()
				+"\t"+InfoVO.get(x).getFileName()+"\n";
				if(InfoVO.get(x).getDir().equals("DIR")){
					dirCnt++;
				}else{
					fileCnt++;
					fileLength = fileLength+InfoVO.get(x).getFIlelength();
				}
			}
			result = result + "\t\t" +fileCnt+"개 파일 \t\t"+commonUtil.fileLength(fileLength)+"\n\t\t"+dirCnt+"개 디렉터리";
		}catch (Exception e) {
			System.out.println(e.getMessage());
			e.getStackTrace();
			return null;
		}	
		return result;
	}

뭐 크게 어려운것 없이 거의 하드 코딩에 가까운 엄청단 for문과 조건으로 이루워져 있지만 그냥 보다 생각나서 한번 올려 본다 ㅎㅎㅎㅎ

'Job'에 해당되는 글 16건

1 2 →