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 |
ExistCheck.java