029.FilePermission

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick1"
        android:text="Vibrator" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/hello_world" />

        </LinearLayout>
    </ScrollView>

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:ems="10"
        android:gravity="left|top" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button2"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="dir" 
            android:onClick="doDir"/>

        <Button
            android:id="@+id/button3"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="save"
            android:onClick="doSave"
            />

        <Button
            android:id="@+id/button4"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doRead"
            android:text="read" />

        <Button
            android:id="@+id/button5"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </LinearLayout>

</LinearLayout>
package com.example.app29;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.Service;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    Vibrator vibrator; // 震動
    TextView textView;
    EditText editName, editContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        vibrator = (Vibrator) this.getSystemService(Service.VIBRATOR_SERVICE);
        textView = (TextView) this.findViewById(R.id.textView1);
        editName = (EditText) this.findViewById(R.id.editText1);
        editContext = (EditText) this.findViewById(R.id.editText2);
    }

    // 震動一秒(要設權限)
    public void onClick(View view) {
        vibrator.vibrate(1000);
    }

    // 讀取sdcard目錄,(要設權限)READ_EXTERNAL_STORAGE
    public void doDir(View view) {
        File path = new File("/sdcard");
        String[] files = path.list();
        textView.setText("");
        for (String file : files) {
            textView.append(file + "\n");
        }
    }

    // 儲存檔案至sdcard,(要設權限)WRITE_EXTERNAL_STORAGE
    public void doSave(View view) {
        String filename = editName.getText().toString();
        String context = editContext.getText().toString();
        FileOutputStream fos = null;

        try {
            fos = new FileOutputStream("/sdcard/" + filename);
            fos.write(context.getBytes());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(this, "發生錯誤", Toast.LENGTH_SHORT).show();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            editContext.setText("");
        }
    }

    // 讀檔
    public void doRead(View view) {
        String filename = editName.getText().toString();
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("/sdcard/" + filename);
            byte[] buff = new byte[fis.available()]; // fis.available() => 檔案大小
            fis.read(buff);
            editContext.setText(new String(buff));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(this, "發生錯誤", Toast.LENGTH_SHORT).show();
        } finally {
            try {
                fis.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}