스마트기기개발관련/안드로이드 개발

안드로이드 개발 파일읽기 파일IO 관련

AlrepondTech 2016. 6. 16. 13:25
반응형


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://bitsoul.tistory.com/116



안드로이드: InternalStorage 장치내부 파일 생성 / 읽기 예제

 

안드로이드 기기에서 자료를 저장하는 방법은 크게 다음 4가지가 있다.  (온라인 전송은 논외이므로 제외)

1. 내부저장장치 InternalStorage
2. 외부저장장치 ExternalStorage
3. DB 저장 : SQLite 
4. SharedPreferences

오늘은 먼저 안드로이드의 내부저장장치 (InternalStorage) 를 사용하는 예제를 포스팅 해봅니다.

기본적으로 자바의 파일 입출력 스트림을 사용하며, openFileOutput()  과 openFileInput() 을 사용하여 안드로이드 내부 저장장치 에 파일을 생성하여 쓰고 읽기를 합니다.

 

[activity_main.xml]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
 
        <requestFocus />
    </EditText>
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="추가 저장" />
 
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="읽어오기" />
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="결과창"
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
</LinearLayout>
cs

 

 

[MainActivity.java]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        final EditText et = (EditText) findViewById(R.id.editText1);
        Button bSave = (Button) findViewById(R.id.button1);
        Button bLoad = (Button) findViewById(R.id.button2);
        final TextView tv = (TextView) findViewById(R.id.textView1);
 
        bSave.setOnClickListener(new View.OnClickListener() {
            @Override    // 입력한 데이터를 파일에 추가로 저장하기
            public void onClick(View v) {
                String data = et.getText().toString();
 
                try { 
                    FileOutputStream fos = openFileOutput
                            ("myfile.txt"// 파일명 지정
                                    Context.MODE_APPEND);// 저장모드
                    PrintWriter out = new PrintWriter(fos);
                    out.println(data);
                    out.close();
 
                    tv.setText("파일 저장 완료");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
 
        bLoad.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 파일의 내용을 읽어서 TextView 에 보여주기
                try {
                    // 파일에서 읽은 데이터를 저장하기 위해서 만든 변수
                    StringBuffer data = new StringBuffer();
                    FileInputStream fis = openFileInput("myfile.txt");//파일명
                    BufferedReader buffer = new BufferedReader
                            (new InputStreamReader(fis));
                    String str = buffer.readLine(); // 파일에서 한줄을 읽어옴
                    while (str != null) {
                        data.append(str + "\n");
                        str = buffer.readLine();
                    }
                    tv.setText(data);
                    buffer.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    } // end of onCreate
// end of class
 
cs

 

[실행화면]

 


 "Hello Android" 입력하고 [추가저장] 누르면 파일저장됨.

 


 

 또 다른 텍스트를 입력하고 [추가저장] 하면 기존 파일에 추가 저장 합니다.


 

 

[읽어오기] 버튼을 누르면 지금까지 내부파일에 저장된 내용이 출력됩니다.


 

 

 



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://yowon009.tistory.com/90



1. asset road resource


1
2
3
4
5
6
7
8
9
10
11
12
private String getStringAssetFile(Activity activity) throws Exception {
AssetManager as = activity.getAssets();
InputStream is = as.open("text1.txt");
// InputStreamReader isr = new
// InputStreamReader(as.open("text1.txt"),"EUC-KR");
String text = convertStreamToString(is);
is.close();
return text;
}
cs



2. inputStream -> String


1
2
3
4
5
6
7
8
9
10
private String convertStreamToString(InputStream is) throws IOException {
ByteArrayOutputStream bs = new ByteArrayOutputStream();
int i = is.read();
while (i != -1) {
bs.write(i);
i = is.read();
}
return bs.toString();
}
cs



3. raw road resource -> String-> wirte String Builder


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private String getStringFromRawFile(Activity activity) throws IOException {
Resources r = activity.getResources();
InputStream is = r.openRawResource(R.raw.text2);
InputStreamReader r2 = new InputStreamReader(is);
StringBuilder str = new StringBuilder();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
while (true) {
int i = r2.read();
if (i == -1)
break;
else {
char c = (char) i;
str.append(c);
bs.write(c);
}
}
// StringBuilder sb = sb.append(c);
// Str ing myText = is.close();
return bs.toString();
}
cs



파일 입출력 정보 더보기

윈도우 Path 핸들링 함수 개요

윈도우 Path 관련 함수 API


MFC - 탐색기 관련 소스 및 예제

MFC - 유니코드 환경에서 파일 생성, 읽기(CFile, CStdioFIle)

MFC - 파일 크기 리턴 함수 StrFormatByteSize()


파일 크기와 포맷을 확인하는 프로그램



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

반응형