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다.
아래와 같은 매서드를 갖는다. 매서드의 역할들은 각 주석을 보며..
'소프트웨어 > Android/Java/Ndk' 카테고리의 다른 글
Android] View Holder 사용 ListView 부드러운 스크롤링. developer.android.com (0) | 2014.06.23 |
---|---|
Android] URL을 이용하여 Bitmap을 생성하고 ImageView에 적용하기 (1) | 2014.06.20 |
Android] SD유무에 따른 path (0) | 2014.06.20 |
Android] JSON 형식 (0) | 2014.05.20 |
Android] 나중에시간되면. Bitmap Memory관리 (LRU캐시) (0) | 2014.05.19 |
Android] ADB 무응답시 (0) | 2014.05.16 |
Android] 소스상에서 좌우 크기 조정하기 (0) | 2014.05.16 |