안드로이드 File 다루기

프로그래밍/Android 2013. 8. 28. 22:41

안드로이드 File 다루기


File 다루기

- 안드로이드는에는 내부, 외부의 두가지의 파일 저장 영역이 있다. (internal, external storage)


internal storage (내부)

- 항상 사용가능하며 내부에 저장된 파일은 기본적으로 해당 앱만 접근 가능하다.

- 시스템은 앱이 제거될때 내부에 저장된 파일을 모두 제거한다.


external storage (외부)

- 이곳에 저장된 파일은 다른 곳에서 읽혀질 수 있다. 따라서 다른 앱과 공유될 수 있거나 컴퓨터로 따로 관리할 파일들을 저장하는데 사용하는 것이 좋다.


참고

앱은 기본적으로 internal storage 에 저장되지만 manifest 파일내의 android:installLocation 속성으로 external storage 에 저장할 수 있다.

예) apk 파일의 사이즈가 매우 큰경우


external storage 권한 얻기

쓰기 권한

<manifest ...>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

</manifest>



읽기 권한

차후에는 external storage 에 대한 읽기 권한은 기본으로 제공될 예정

<manifest ...>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

</manifest>


internal storage 에 파일 저장하기

getFileDir()

- 앱 관련된 파일을 저장할 내부 디렉토리의 File 객체를 리턴한다.

getCacheDir()

- 앱의 임시 캐쉬 파일을 저장할 수 있는 디렉토리의 File 객체를 리턴한다.


파일 저장하기

File file = new File(context.getFilesDir(), filename);


String filename = "myfile";

String string = "Hello world";

FileOutputStream outputStream;


try{

outputStream = openFileOutput( filename, Context.MODE_PRIVATE);

outputStream.write( string.getBytes());

outputStream.close();

}catch( Exception e){

e.printStackTrace();

}


임시파일 생성

public File getTempFile( Context context, String url){

File file;

try{

String fileName = Uri.parse(url).getLastPathSegment();

file = File.createTempFile( fileName, null, context.getCacheDir());

}catch( IOException e){

}

return file;

}



external stroage 에 파일 저장하기

외부 저장소가 연결되어 있으며 사용가능한지 여부 체크

public boolean isExternalStorageWritable(){

String state = Environment,getExternalStorageState();

if( Environment.MEDIA_MOUNTED.equals( state)){

return true;

}

return false;

}


public boolean isExternalStorageReadable(){

String state = Environment.getExternalStorageState();

if( Environment.MEDIA_MOUNTED.equals( state) ||

Environment.MEDIA_MOUNTED_READ_ONLY.equals( state)){

return true;

}

return false;

}



external storage 공용 public 저장소 사용하기

public 저장소는 앱을 삭제해도 저장되어 있는 파일이 사용가능하다.

public File getAlbumStorageDir( String albumName){

File file = new File( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), 

albumName

);

if( !file.mkdir()){

Log.e( LOG_TAG, "Directory not created");

}

return file;

}



external storage 개인 private 저장소 사용하기

앱이 제거되면 private 저장소내의 모든 파일을 삭제한다.

public File getAlbumStorageDir( String albumName){

File file = new File( Environment.getExternalFilesDir( Environment.DIRECTORY_PICTURES), 

albumName

);

// root 디렉토리 얻기

// file = new File( Environment.getExternalFilesDir( null)); 

if( !file.mkdir()){

Log.e( LOG_TAG, "Directory not created");

}

return file;

}


저장공간 확인

getFreeSpace(), getTotalSpace() 로 확인할 수 있다.



파일 삭제하기

myFile.delete();

myContext.deleteFile( fileName);


: