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

1 ··· 25 26 27 28 29 30 31 32 33 ··· 48 →