使用文件进行数据存储(FileOutputStream和FileInputStream)

完成如下图所示的效果图:

其主要功能有:1.点击保存按钮后会将文件的内容保存到此文件名的文件中。

                         2. 点击读取按钮前,先确定要读取文件的名称,点击后会将此文件中的文件内容读入到文件内容下的文本框。

注意:当想把存储的文件导出时,如果是中文内容那么会出现Failed to pull selection错误,若内容和名称均为英文将会导出成功。

首先,先对此页面进行布局,在activity_file_stream.xml中的代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- 文件名称 -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/name"
        android:textSize="20dip"
        tools:context=".FileStreamActivity" />
    <!-- 输入文件名称 -->

    <EditText
        android:id="@+id/inputname"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:inputType="text" />
    <!-- 文件内容 -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/context"
        android:textSize="20dip" />
    <!-- 输入文件内容 -->

    <EditText
        android:id="@+id/inputcontent"
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:focusable="true"
        android:inputType="text" />

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

        <!-- 保存按钮 -->

        <Button
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/save" />
        <!-- 读取按钮 -->

        <Button
            android:id="@+id/read"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/read" />
    </LinearLayout>

</LinearLayout>


其次编写业务层 FileService.java。代码如下:

package com.bzu.filestream.service;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;

public class FileService {
    private Context context;
    public FileService(Context context){
    	super();
    	this.context=context;
    }
    /*
     * 保存文件内容
     */
    public void save(String fileName,String content) throws Exception{
    	FileOutputStream fos;
    	fos=context.openFileOutput(fileName, Context.MODE_PRIVATE);
    	fos.write(content.getBytes());
    	fos.close();
    }
    /*
     * 从文件中读取内容
     */
    public String read(String FileName) throws IOException{
    	FileInputStream fis=context.openFileInput(FileName);
    	int len=0;
    	byte[] buffer=new byte[1024];
    	// 往内存中输出数据的
    	ByteArrayOutputStream baos=new ByteArrayOutputStream();
    	// 如果数据量很大,第2次读取的数据有可能会把第1次读取的数据给覆盖掉
    	while((len=fis.read(buffer))!=-1){
    		baos.write(buffer,0,len);
    	}
    	// 得到内存中的数据 以二进制存放的
    	byte[] data=baos.toByteArray();
    	baos.close();
    	fis.close();
    	// 根据二进制数据转换成所对应的字符串
    	return new String(data);
    }
    
}


最后,编写主要的Activity(FileStreamActivity.java),代码如下:

 

package com.bzu.filestream.activity;



import com.bzu.filestream.service.FileService;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class FileStreamActivity extends Activity {
	private EditText name;
	private EditText content;
	private Button save;
	private Button read;
	FileService fileService=new FileService(FileStreamActivity.this);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_stream);
        name=(EditText)this.findViewById(R.id.inputname);
        content=(EditText)this.findViewById(R.id.inputcontent);
        save=(Button) this.findViewById(R.id.save);
        read=(Button) this.findViewById(R.id.read);
        // 点击保存按钮,完成保存功能
        save.setOnClickListener(new ButtonHandle1());
        // 点击读取按钮,完成读取内容的功能
        read.setOnClickListener(new ButtonHandle2());
    }
    /*
     * 处理保存按钮点击事件
     */
    private class ButtonHandle1 implements OnClickListener{

		public void onClick(View v) {
			// 存放页面组件传来的内容
	        String fileName=name.getText().toString();
	        String fileContent=content.getText().toString();
	        try {
				fileService.save(fileName, fileContent);
			} catch (Exception e) {
				e.printStackTrace();
			}
	        Toast.makeText(getApplicationContext(), "保存成功!", Toast.LENGTH_LONG).show();
		}
    	
    }
    /*
     * 处理读取按钮点击事件
     */
    private class ButtonHandle2 implements OnClickListener{

		public void onClick(View v) {
			// 存放页面组件传来的内容
	        String fileName=name.getText().toString();
	        try {
				content.setText(fileService.read(fileName));
			} catch (Exception e) {
				e.printStackTrace();
			}
	        Toast.makeText(getApplicationContext(), "读取成功!", Toast.LENGTH_LONG).show();
		}
    	
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_file_stream, menu);
        return true;
    }

    
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值