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 파싱하기 생각보다 엄청 편해서 쓸만함

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문과 조건으로 이루워져 있지만 그냥 보다 생각나서 한번 올려 본다 ㅎㅎㅎㅎ

Java Getter Setter Tostring등 annotation 으로 해결 해주는 Lombok

예전에 프로잭트를 진행하면서 DTO, VO 생성하면서 기본으로 따라오는 getter, setter, tostring을 달기 위해 Eclipse 우클릭 source에서 클릭 클릭 귀찮아 단축키로 만들기를 해봤지만 그또한 귀찮은 작업의 반복에 열불이 나있던차 손쉬운 방법을 찾다 재미난것을 발견 Lombok이라는 놈이다.

 

Class에 변수 선언후 annotaion만 선언 해주면 힘든 getter, setter, tostring을 안만들어도 사용 할수 있도록 해주는 놈이다.

 

설치법 사용 법도 아주 간단해서 포스팅 해본다.

 

다운로드 경로는 : http://projectlombok.org

Maven 경로는 :

<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>0.11.6</version>
</dependency>

설치 방법은 아래와 같다.


1. 다운 받은 jar 파일을 위와 같이 java로 실행 한다.

 

2. Install 화면에서 적용할 Eclipse를 선택하여 Install/Update 클릭 하는것으로 설치는 끝이다.

 

 

사용법은 아래와 같이 간단하게

 

1. Getter,Setter등이 필요한 VO 클래스에 접근한다.

 

 

2. Lombok import 하고 Annotaion만 잡아 주면 설정은 끝.

 

 

3. Class를 보면 getter,setter,tostring이 있는것을 확인할수 있다.

 

 

4. 위와 같이 보아도 getter,setter,tostring이 있는것도 확인.

 

 

 

 

이거 완전 득탬한 기분 아닌가 package랑 class 보기 좋게 만든다고 서비스별로 VO 다 쪼개서 만들때 엄청난 양의 VO에 getter,setter,tostring 만든다고 노가다 한거 생각하면 진짜 눈물이 앞을.....

 

'Job/Java'에 해당되는 글 3건

1 →