※ 파일 사용 방법
● 애플리케이션 패키지에 포함된 리소스 파일 사용
- res/raw 폴더 (읽기만 가능)
- 안드로이드에서 따로 처리하지 않고 애플리케이션에 포함하여 배포
- Resource를 통해 openRawResource() 로 파일 오픈
● 애플리케이션 실행 도중에 파일을 만들어서 사용
- /data/data/패키지이름/files 폴더(읽기/쓰기 가능)
- openFileInput, openFileOutput 사용
● sdcard(읽기 / 쓰기 가능)
- sdcard에 파일을 저장하기 위해서는 권한 필요
"android.permission.WRITE_EXTERNAL_STORAGE" />
※ 파일 입출력
● openFileOutput(String name, int mode)
- MODE_PRIVATE
: 다른 앱에서 사용할 수 없는 배타적인 모드(기본모드)
- MODE_APPEND
: 파일이 이미 존재할 경우 덮어쓰기가 아닌 추가 모드
- MODE_WORLD_READABLE
: 다른 앱에서 파일을 읽을 수 있도록 허용
- MODE_WORLD_WRITEABLE
: 다른 앱에서 파일을 기록할 수 있도록 허용
●openFileInput(String name)
※ 파일 경로
- /data/data/패키지명/files 폴더로 고정됨(리눅스의 보안 정책상 다른 경로를 임의로 지정할
수 없음)
※ 스트림(stream)
- 데이터의 입출력을 담당하는 중간자 역할
- ex) 상하수도
※ 스트림의 종류
- 문자 스트림 :Reader, Writer
- 문자 단위 입출력(2바이트)
- 바이트 스트림 : InputStream , OutputStream
- 바이트 단위 입출력(1바이트)
ListActivity 을 적용해서 개별 클릭이 가능 하게 하기 위해서는
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_centerVertical="true"
/>
android:id="@android:id/list"
형식으로 아이디값을 적용 해 줘야 한다.
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.button2:
//현재 화면에서 ListDemo1으로 이동
intent =new Intent(this, ListDemo1.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/button2"
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_below="@+id/button2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
class ListDemo1
package com.example.choi.ex04_file;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ListDemo1 extends ListActivity {
//1. 변수 선언
TextView txtResult;
String[] items={"사과", "포도", "레몬", "수박", "바나나", "체리"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list1);
//2.리소스 연결
txtResult =(TextView)findViewById(R.id.textResult);
//3.집합데이터 =>아답타 =>리스트뷰(집합뷰)로 변환
// new ArrayAdapter<자료형>(현재화면, 출력옵션, 출력데이터)
//android.R.java =>안드로이드 내장 R class
//아답터 생성
ArrayAdapter<String> adapter=new ArrayAdapter<String>(
this, android.R.layout.simple_list_item_1, items);
// 아답터 적용
setListAdapter(adapter);
}
//Alt+Insert
//Override Methods
//리스트뷰의 아이템을 선택할 때 호출
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//Toast :팝업 메시지
//position - 리스트뷰의 아이템 인덱스
//Toast.makeText(출력할 액티비티, 출력할 메시지, 옵션).show()
//Toast.LENGTH_SHORT : 1~2초
//Toast.LENGTH_LONG : 2~3초
Toast.makeText(this, position+"번째 항목", Toast.LENGTH_SHORT).show();
super.onListItemClick(l, v, position, id);
}
}
list1.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/list1"
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.ListDemo1">
<TextView
android:text=""
android:layout_width="wrap_content"
android:id="@+id/textResult"
android:layout_height="wrap_content" />
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_centerVertical="true"
/>
</RelativeLayout>
class ResourceActivity
package com.example.choi.ex04_file;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class ResourceActivity extends ListActivity {
//1.변수 선언
ListView list1;
List<String> items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resource);
//2. 리소스 연결
// list1 =(ListView)findViewById(R.id.list1);
items=new ArrayList<>();
//3.xml 파일을 읽어서 List에 저장
// xml 분석 (parsing)
try{
// words.xml 을 읽어서 InputStream 으로 변환
// getResources() => res 디렉토리
// openRawResource() => raw 디렉토리
InputStream is=getResources().openRawResource(R.raw.words);
// xml 파일 분석기 DocumentBuilder 생성
DocumentBuilder builder= DocumentBuilderFactory.newInstance().newDocumentBuilder();
// xml document 객체 생성
Document doc =builder.parse(is, null);
// word 태그들을 모두 선택
NodeList words =doc.getElementsByTagName("word");
for(int i=0; i<words.getLength(); i++){
items.add(
((Element)words.item(i)).getAttribute("value")
);
}
is.close(); //스트림 닫기
}catch (Exception e){
e.printStackTrace();
}
//4. 아답터 생성
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
setListAdapter(adapter);
}
//Alt+Insert
//Override Methods
//리스트뷰의 아이템을 선택할 때 호출
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//Toast :팝업 메시지
//position - 리스트뷰의 아이템 인덱스
//Toast.makeText(출력할 액티비티, 출력할 메시지, 옵션).show()
//Toast.LENGTH_SHORT : 1~2초
//Toast.LENGTH_LONG : 2~3초
Toast.makeText(this, position+"번째 항목", Toast.LENGTH_SHORT).show();
super.onListItemClick(l, v, position, id);
}
}
resource.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/resource"
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.ResourceActivity">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
//list1.setAdapter(adapter); 가 아니라
setListAdapter(adapter); 이다.
댓글 ( 4)
댓글 남기기