본문 바로가기

소프트웨어/Android/Java/Ndk

Android] 폴더를 체크하고 추가하는 Class

Android에서 Root Path를 구하고 원하는 Folder를 추가하고 폴더에 하위에 dat파일을 생성하는 Class다. 매번 직접 소스를 쳐가면서 했었는데 귀찮아서 Class 파일로 뽑아놨음.


Root Path : SD카드 Mount 유무에 따라 얻어지는 최상위 Path

자세한 설명은 SD카드 Mount에 따른 안드로이드 Path 에서..

Folder :  Root Path 하위에 추가하고자 하는 Folder의 이름

dat파일 : 난 Folder 하위에 .dat 파일을 생성해서 자주 사용하므로 기능을 추가하였다.




public interface ExistCheck {
	
	/**
	 * 내부 PATH에 폴더명을 넣어서 PATH String에 추가한다.
	 */
	abstract public void addPath(String addedFolderName); 
	
	/**
	 * root path에 파일을 추가한다.
	 * @return
	 */
	abstract public boolean makeFile(String addedFileName);
	
	/**
	 * input param없이 내부 root를 기준으로 폴더를 만든다
	 * @return make 성공 여부
	 */
	abstract public boolean makePath();
	
	/**
	 * input param string에 맞는 새로운 경로를 make한다
	 * @param addedFullPath
	 * @return make 성공 여부
	 */
	abstract public boolean makePath(String addedFullPath);



	/**
	 * SD카드의 MOUNT유무에 따라서 그에 알맞는 PATH를 return한다(새로 구해서 path변수에 저장)
	 * @return String PATH
	 */
	abstract public String getExternalOrInternalPath();
}



ExistCheck Interface이다. FileExistCheck에 필요한 추상 매서드들을 갖는다.





public class FolderExistCheck implements ExistCheck{
	//클래스 전역변수
	private Context context;
	private String rootFolderName = ""; //추가될 폴더 이름
	private String root = ""; //저장하는 폴더의 root dir
	private String datFileName="";
	private String datPath="";
	
	/**
	 * projectName을 내부 private 변수에 추가하는 생성자\n
	 * getExternalOrInternalPath 로 mount depentent한 path를 구한 후
	 * addPath를 통해 폴더명을 추가한다
	 * 그 후 makePath를 통해 최종경로와 같은 폴더를 생성한다
	 * @param projectName
	 */	
	public String getFolderName() {
		Log.i("mstag","getFolderName is "+rootFolderName);
		return rootFolderName;
	}
	
	/**
	 * FolderExistCheck Class의 생성자. 
	 * @param context Application context, Application이 아니라면 null 사용 가능
	 * @param projectName 구해진 Root Path 하위에 추가될 폴더의 이름이 된다.
	 */
	public FolderExistCheck(Context context,String projectName) {
		this.context = context;
		this.rootFolderName = projectName;
		this.root=getExternalOrInternalPath();
		//this.datFileName=context.getString(R.string.datFileName);
	}

	/**
	 * FolderExistCheck Class의 생성자. 
	 * @param context Application context
	 * @param projectName 구해진 Root Path 하위에 추가될 폴더의 이름이 된다.
	 * @param datFileName 폴더 내부에 생성할 .dat 파일의 이름이 된다
	 */
	public FolderExistCheck(Context context,String projectName, String datFileName) {
		this.context = context;
		this.rootFolderName = projectName;
		this.root=getExternalOrInternalPath();
		this.datFileName=datFileName;
	}
	

	@Override
	public void addPath(String addedFolderName) {
		// TODO Auto-generated method stub
		//this.root.concat("/").concat(addedFolderName);
		root=root+"/"+addedFolderName;
		Log.i("mstag","added Path=>"+root);
	}

	

	@Override
	public boolean makePath() {
		// TODO Auto-generated method stub
		boolean ret=false;
		File rootCheck = new File(this.root);
        if( ! rootCheck.exists() ) { //최상위 루트폴더 미 존재시
        	ret=rootCheck.mkdir(); Log.i("mstag","root make");
        }else {
        	Log.i("mstag",this.root+" is alreay exist");
        }
		return ret;
	}
	
	
	@Override
	public boolean makePath(String addedFullPath) {
		// TODO Auto-generated method stub
		boolean ret=false;
		File rootCheck = new File(addedFullPath);
        if( ! rootCheck.exists() ) { //최상위 루트폴더 미 존재시
        	ret=rootCheck.mkdir(); Log.i("mstag","root make");
        }else {
        	Log.i("mstag",addedFullPath+" is alreay exist");
        }
		return ret;
	}


	@Override
	public String getExternalOrInternalPath() {
		// TODO Auto-generated method stub
		String sdcard= Environment.getExternalStorageState();
        String ret="";
		if( ! sdcard.equals(Environment.MEDIA_MOUNTED) ) {
        	//SD카드 UNMOUNTED
        	Log.i("mstag","sdcard unmounted");
        	ret = "" + Environment.getRootDirectory().getAbsolutePath(); //내부저장소의 주소를 얻어옴
        } else {
        	//SD카드 MOUNT
        	Log.i("mstag","sdcard mounted");
        	ret = "" + Environment.getExternalStorageDirectory().getAbsolutePath(); //외부저장소의 주소를 얻어옴
        }		
		Log.i("mstag","root dir is => "+ret);
		return ret;
	}

	/**
	 * app의 전체 폴더 경로 폴더에 .dat파일을 추가한다.
	 */
	public void makeDatFile() {
		makeFile(datFileName);
		setDatPath(datFileName);
	}
	
	@Override
	public boolean makeFile(String addedFileName) {
		// TODO Auto-generated method stub
		boolean ret=false;
		String addedFullPath= root+"/"+addedFileName;
		File file = new File(addedFullPath);
		if(file.exists()) {
			ret=false;
			Log.i("mstag",addedFullPath+" 이미 있음.추가실패"+ret);
		}else{
			try{
				file.createNewFile();
				ret=true;
			}catch(Exception e) {
				e.printStackTrace();
				ret=false;
			}
			Log.i("mstag",addedFullPath+" 추가성공?"+ret);
		}
		
		return ret;
	}

	/**
	 * .dat 파일을 추가하기 위한 경로를 세팅한다.
	 * @param addedFileName 입력받은 String이 .dat파일의 이름이 된다.
	 */
	public void setDatPath(String addedFileName) {
		datPath=root+"/"+addedFileName;
	}

	/**
	 * .dat파일의 경로를 return한다.
	 * @return String .dat file path
	 */
	public String getDatPath() {
		return datPath;
	}
}



Interface를 implement한 FileExistCheck Class다.

아래와 같은 매서드를 갖는다. 매서드의 역할들은 각 주석을 보며..







ExistCheck.java


FolderExistCheck.java