안 드 로 이 드 는 핸드폰 내부 저장 공간 과 외부 저장 공간 을 가 져 옵 니 다.

원문: http://blog.163.com/hero_213/blog/static/39891214201162123236660/
이 코드 세 션 은 내부 와 외부 저장 공간 크기 를 가 져 올 수 있 습 니 다. 
import
java
.
io
.
File
;
                                                                                               
import
android
.
os
.
Environment
;
   
import
android
.
os
.
StatFs
;
   
    
public
class
StorageUtil
{
   
private
static
final
int
ERROR
=
-
1
;
   
/**
     * SDCARD 저장 여부
     */
   
public
static
boolean
externalMemoryAvailable
()
{
       
return
android
.
os
.
Environment
.
getExternalStorageState
().
equals
(
                android
.
os
.
Environment
.
MEDIA_MOUNTED
);
   
}
   
/**
     * 핸드폰 내부 의 남 은 저장 공간 가 져 오기
     * @return
     */
   
public
static
long
getAvailableInternalMemorySize
()
{
       
File
path
=
Environment
.
getDataDirectory
();
       
StatFs
stat
=
new
StatFs
(
path
.
getPath
());
       
long
blockSize
=
stat
.
getBlockSize
();
       
long
availableBlocks
=
stat
.
getAvailableBlocks
();
       
return
availableBlocks
*
blockSize
;
   
}
   
/**
     * 휴대 전화 내부 의 총 저장 공간 가 져 오기
     * @return
     */
   
public
static
long
getTotalInternalMemorySize
()
{
       
File
path
=
Environment
.
getDataDirectory
();
       
StatFs
stat
=
new
StatFs
(
path
.
getPath
());
       
long
blockSize
=
stat
.
getBlockSize
();
       
long
totalBlocks
=
stat
.
getBlockCount
();
       
return
totalBlocks
*
blockSize
;
   
}
   
/**
     * SDCARD 남 은 저장 공간 가 져 오기
     * @return
     */
   
public
static
long
getAvailableExternalMemorySize
()
{
       
if
(
externalMemoryAvailable
())
{
           
File
path
=
Environment
.
getExternalStorageDirectory
();
           
StatFs
stat
=
new
StatFs
(
path
.
getPath
());
           
long
blockSize
=
stat
.
getBlockSize
();
           
long
availableBlocks
=
stat
.
getAvailableBlocks
();
           
return
availableBlocks
*
blockSize
;
       
}
else
{
           
return
ERROR
;
       
}
   
}
   
/**
     * SDCARD 의 총 저장 공간 가 져 오기
     * @return
     */
   
public
static
long
getTotalExternalMemorySize
()
{
       
if
(
externalMemoryAvailable
())
{
           
File
path
=
Environment
.
getExternalStorageDirectory
();
           
StatFs
stat
=
new
StatFs
(
path
.
getPath
());
           
long
blockSize
=
stat
.
getBlockSize
();
           
long
totalBlocks
=
stat
.
getBlockCount
();
           
return
totalBlocks
*
blockSize
;
       
}
else
{
           
return
ERROR
;
       
}
   
}
}
1. 하드웨어 의 block size 는 "sector size" 여야 합 니 다. Liux 의 섹 터 크기 는 512 byte 입 니 다.
2. 파일 시스템 의 파 티 션 이 있 는 block size 는 "block size" 입 니 다. 크기 가 다 르 면 도구 로 볼 수 있 습 니 다.
3. 파일 시스템 의 파 티 션 이 없 는 block size 는 "block size" 라 고도 부 릅 니 다. 크기 는 1024 byte 를 말 합 니 다.
4. Kernel buffer cache 의 block size 는 바로 "block size" 이 고 대부분 PC 는 1024 입 니 다.
5. 디스크 섹 션 의 "cylinder size" 를 fdisk 로 볼 수 있 습 니 다.
여기 있 는 block size 는 두 번 째 상황 입 니 다. 보통 SD 카드 는 fat 32 의 파일 시스템 이 고 block size 는 4096 입 니 다.
이렇게 하면 휴대 전화의 내부 저장 공간 과 sd 카드 저장 공간의 총 크기 와 사용 가능 한 크기 를 알 수 있다.

좋은 웹페이지 즐겨찾기