296
No
class MainActivity
package com.example.choi.ex04_file;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onClick(View v){
Intent intent=null;
switch (v.getId()){
case R.id.button1:
intent=new Intent(this, ResourceActivity.class);
break;
case R.id.button0:
//현재 화면에서 ListDemo1으로 이동
intent =new Intent(this, ListDemo1.class);
break;
//내장 메모리
case R.id.button2:
intent=new Intent(this, ReadWriteActivity.class);
break;
//외장 메모리
case R.id.button3:
intent=new Intent(this, SdcardActivity.class);
break;
}
startActivity(intent);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.ex04_file.MainActivity">
<Button
android:text="ListActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button0"
android:onClick="onClick"
/>
<Button
android:text="리소스 파일 읽기"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button1"
android:onClick="onClick"
android:layout_marginTop="11dp"
android:layout_below="@+id/button0"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:text="파일 입출력(내장 메모리)"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:onClick="onClick"
android:layout_marginTop="18dp"
android:layout_below="@+id/button1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
/>
<Button
android:text="파일입출력(외장메모리)"
android:onClick="onClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:layout_marginTop="19dp"
android:id="@+id/button3" />
</RelativeLayout>
class SdcardActivity
package com.example.choi.ex04_file;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
public class SdcardActivity extends AppCompatActivity {
//1.변수 선언
Button btnSave, btnLoad, btnDelete;
EditText edit1;
String path; //sdcard 의 경로
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.read_write);
//2. 위젯 연결
btnSave=(Button)findViewById(R.id.btnSave);
btnLoad=(Button)findViewById(R.id.btnLoad);
btnDelete=(Button)findViewById(R.id.btnDelete);
edit1=(EditText)findViewById(R.id.edit1);
//sdcard의 절대 경로(안드로이드 버전, 제조사마다 디렉토리가 다름)
path = Environment.getExternalStorageDirectory().getAbsolutePath();
//아래 처럼 절대 경로로 하면 안된다. 기기만다 다르기 때문에 위처럼 해야 한다.
//path="/storage/emulated/0/";
//3. 저장 버튼 클릭
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
check();
}
});
}
//사용권한 체크 (Minimum SDK vesrion 을 23 으로 설정 )
void check(){
//권한 검사(AndroidManifest.xml) , 사용자의 동의 여부
if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED ||
checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
)
{
//권한 설정이 왜 필요한지 사용자에게 안내문 출력(선택적인 옵션)
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Toast.makeText(this, "외부메모리에 읽기/쓰기 권한이 필요합니다.", Toast.LENGTH_LONG).show();
}
//팝업
//requestPermissions("사용권한 배열", 요청코드)
// 요청코드는 임의의 값 사용 가능
requestPermissions(new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else{
// 동의한 상태 => save()
save();
}
// 동의하지 않은 상태
//팝업
}
//사용자의 사용권한 동의 여부가 전달
//int requestCode - 요청코드
//String[] permissions - 요청권한 배열
//int[] grantResults - 권한 수락 여부 배열
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1: //요청코드
if(grantResults.length > 0 &&
grantResults[0]==PackageManager.PERMISSION_GRANTED &&
grantResults[1]==PackageManager.PERMISSION_GRANTED
){
save();
}else{
Toast.makeText(this, "더이상 외부메모리를 사용할 수 없습니다.",
Toast.LENGTH_LONG).show();
}
}
}
void save(){
//외부메모리의 경로 내장 메모리 저장할 때의 코드작성과 같다. 차이는 path
File file=new File(path+"/test.txt");
try{
FileOutputStream fos =new FileOutputStream(file);
String str =edit1.getText().toString();
fos.write(str.getBytes());
fos.close();//스트림 닫기
Toast.makeText(this, "저장되었습니다.", Toast.LENGTH_LONG).show();
}catch (Exception e){
e.printStackTrace();
}
}
}
read_write.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/read_write"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.ex04_file.ReadWriteActivity">
<Button
android:text="저장"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/btnSave" />
<Button
android:text="불러오기"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/btnLoad" />
<Button
android:text="삭제"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:id="@+id/btnDelete" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/edit1"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_below="@+id/btnSave" />
</RelativeLayout>
댓글 ( 4)
댓글 남기기