1. 안드로이드 저장소
- 안드로이드는 애플리케이션이 데이터를 저장할 수 있는 저장소를 두 가지로 제공하고 있다.
1. 내부 저장소 :
- 애플리케이션을 통해서만 접근이 가능하다.
- 코드를 통해서 접근할 수 있는 저장소.
- 각 애플리케이션 마다 내부 저장소를 갖고있으며 앱이 삭제되면 내부 저장소도 삭제된다.
2. 외부 저장소 :
- 단말기 내부의 공유 영역으로 모든 애플리케이션이 접근 가능하다.
- 단말기를 컴퓨터에 연결하면 탐색기를 통해 접근 할 수 있는 영역을 의미한다.
- 용량 or 공유 목적으로 사용된다.
2. 파일 입출력
1. 내부 저장소
- openFileInput, openFileOutput
2. 외부 저장소
- FileInputStream, FileOutputStream
- 외부 저장소 저장시 "android/data/패키지명" 폴더에 저장하면 애플리케이션 삭제 시 같이 삭제되며 그 외의 폴더는 유지된다.
3. 예제 - 내부저장소
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener { view ->
// 1. 예외처리
try{
// 2. FileOutputStream 추출 -> 내부저장소와 연결되어있는 스트림.
// APPEND : 추가 / PRIVATE : 덮어씀
// 내부 저장소에 "myFile"이라는 데이터를 만든거고, 이 파일에다가 데이터를 쓴것.
var output = openFileOutput("myFile.dat", Context.MODE_PRIVATE)
// 3. 새로 생성한 데이터 쓰기.
var dos = DataOutputStream(output)
dos.writeInt(100)
dos.writeDouble(11.11)
dos.writeUTF("안녕하세요")
dos.flush()
dos.close()
textView.text = "저장완료"
}catch (e : Exception)
{
e.printStackTrace()
}
}
button2.setOnClickListener { view ->
try {
// 4. dataInputStream 추출
var input = openFileInput("myFile.dat")
// 5. 데이터 읽어오기.
var dis = DataInputStream(input)
var value1 = dis.readInt()
var value2 = dis.readDouble()
var value3 = dis.readUTF()
dis.close()
textView.text = "value1 : ${value1}\n"
textView.append("value2 : ${value2}\n")
textView.append("value3 : ${value3}\n")
}catch (e : Exception)
{
e.printStackTrace()
}
}
}
}
4. 외부저장소
- 외부저장소 사용엔 권한요청이 필요하다.
- path = Environment.getExternalStorageDirectory().absolutePath + "/android/data/" + packageName에 파일을 저장하면 패키지(앱)이 삭제될 때 저 데이터도 같이 사라지게 된다.
class MainActivity : AppCompatActivity() {
var permission_list = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)
// 2. 외부저장소 파일 경로를 담을 변수 생성
var path : String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 3. 외부저장소 경로 + "/android/data/" + 패키지명이기 때문에 어플이 삭제되면 같이 삭제된다.
path = Environment.getExternalStorageDirectory().absolutePath + "/android/data/" + packageName
// 1. 권한 요청
checkPermission()
// 4.path 경로에 해당하는 디렉토리가 없으면 만든다.
var file = File(path)
if(file.exists() == false)
{
file.mkdir()
}
button3.setOnClickListener { view ->
try {
var output = FileOutputStream(path + "/sdFile.dat")
var dos = DataOutputStream(output)
dos.writeInt(200)
dos.writeUTF("반갑습니다")
dos.flush()
dos.close()
textView.text = "저장완료"
}catch (e : Exception)
{
e.printStackTrace()
}
}
button4.setOnClickListener { view ->
try {
// 4. dataInputStream 추출
var input = FileInputStream(path + "/sdFile.dat")
// 5. 데이터 읽어오기.
var dis = DataInputStream(input)
var value1 = dis.readInt()
var value2 = dis.readUTF()
dis.close()
textView.text = "value1 : ${value1}\n"
textView.append("value2 : ${value2}\n")
}catch (e : Exception)
{
e.printStackTrace()
}
}
}
fun checkPermission()
{
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
{
return
}
for(permission in permission_list)
{
var chk = checkCallingOrSelfPermission(permission)
if(chk == PackageManager.PERMISSION_DENIED)
{
requestPermissions(permission_list, 0)
}
}
}
}
'Deperecated > Android_강의' 카테고리의 다른 글
안드로이드 - SQLite 데이터베이스(2) (0) | 2020.02.19 |
---|---|
안드로이드 - SQLite 데이터베이스(1) (0) | 2020.02.19 |
안드로이드 - DialogFragment (0) | 2020.02.19 |
안드로이드 - ListFragment (0) | 2020.02.19 |
안드로이드 - Activity Controller (0) | 2020.02.19 |