안드로이드

※ 파일 사용 방법

 ● 애플리케이션 패키지에 포함된 리소스 파일 사용

    - 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);  이다.

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

나와 나 사이에는 나와 타인과의 사이에서 볼 수 있는 것만큼 큰 차이점이 있다. -몽테뉴

댓글 ( 4)

댓글 남기기

작성