Fork me on GitHub

android数据存储之File

android中使用File进行存储主要使用到OpenFileOutput和OpenFileInput两个方法,下面直接用一个例子来说明一下。

(1)布局文件main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <TableRow >
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="文件名:"
            android:textSize="20sp"/>
        <EditText 
            android:id="@+id/name"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:text=""
            />
    </TableRow>
     <TableRow >
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="内容:"
            android:textSize="20sp"/>
        <EditText 
            android:id="@+id/content"
            android:layout_width="200dp"
            android:layout_height="100dp"
            android:text=""
            />
    </TableRow>
    
     <Button 
         android:id="@+id/save"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="保存"
         android:textSize="20sp"
         />
     <Button 
         android:id="@+id/read"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="读取"
         android:textSize="20sp"
         />
     <!-- 用于显示存储在File中的数据 -->
    <TextView 
        android:id="@+id/result"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20sp"/>

</TableLayout>

(2)service方法

package com.yby.file;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileService {

    //文件的保存
    public void save(OutputStream outstream,String content) throws IOException{
        outstream.write(content.getBytes());
        outstream.close();
    }
    
    //文件的读取
    public String read(InputStream inputstream) throws IOException{
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len ;
        while((len=inputstream.read(buffer))!=-1){
            baos.write(buffer,0,len);
        }
        byte[] data = baos.toByteArray();
        baos.close();
        inputstream.close();
        return new String(data);
    }
}

(3)activity代码实现

package com.yby.file;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity  extends Activity{

    private EditText name,content;
    private Button save,read;
    private TextView result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        name = (EditText) findViewById(R.id.name);
        content = (EditText) findViewById(R.id.content);
        save = (Button) findViewById(R.id.save);
        read = (Button) findViewById(R.id.read);
        result = (TextView) findViewById(R.id.result);
        save.setOnClickListener(listener);
        read.setOnClickListener(listener);
    }
    
    
    private OnClickListener listener = new OnClickListener() {
        
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
            case R.id.save:
                try {
                    // Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
                    // Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
                    // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
                    // MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
                    // 如果希望文件被其他应用读和写,可以传入:
                    // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
                    OutputStream outstream =  MainActivity.this.openFileOutput(name.getText().toString(), Context.MODE_APPEND);
                    FileService service = new FileService();
                    service.save(outstream, content.getText().toString());
                    Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case R.id.read:
                try {
                    InputStream instream =  MainActivity.this.openFileInput(name.getText().toString());
                    FileService service = new FileService();
                    String str = service.read(instream);
                    result.setText(str);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            default:
                break;
            }
        }
    };
}

(4)使用shell命令查看写入的文件内容

posted on 2015-03-28 14:16  骑着乌龟漫步  阅读(256)  评论(0编辑  收藏  举报

导航