必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android文件存储与读取(手机内存、SD卡)

时间:2019-11-02 21:43:17来源:IT技术作者:seo实验室小编阅读:71次「手机版」
 

手机sd卡

1.activity_main.xml文件中

 <!-- 保存数据手机内存中 -->
    <Button
        Android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignparentLeft="true"
        android:layout_below="@+id/etContent"
         android:layout_centerHorizontal="true"
        android:text="保存" 
        android:onClick="save"/>
	
   <!--  要保存的数据 -->
    <EditText
        android:id="@+id/etContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btnSave"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_margintop="16dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <!--  将信息写入到sd卡中 -->
    <Button
        android:id="@+id/btnSaveTosdcard"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/tvContent"
        android:layout_below="@+id/btnLoad"
        android:layout_marginTop="37dp"
        android:onClick="saveTosdcard"
        android:text="保存到SD卡" />
    
   <!--  读取信息输入到tvContent中 -->
    <Button
        android:id="@+id/btnLoad"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnSave"
        android:layout_marginTop="19dp"
        android:layout_toLeftOf="@+id/tvContent"
        android:text="载入"
        android:onClick="load" />

    <TextView
        android:id="@+id/tvContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnLoad"
        android:layout_alignBottom="@+id/btnLoad"
        android:layout_marginleft="30dp"
        android:layout_toRightOf="@+id/btnSave"
        android:text="" />
	
    <!-- 从SD卡中读取数据显示到tvsdcard文本中 -->
    <Button
        android:id="@+id/btnloadFromSdcard"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btnSaveTosdcard"
        android:layout_below="@+id/btnSaveTosdcard"
        android:layout_marginTop="35dp"
        android:text="从sd卡中读取信息" 
        android:onClick="loadFromSdcard"/>

    <TextView
        android:id="@+id/tvsdcard"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnloadFromSdcard"
        android:layout_alignBottom="@+id/btnloadFromSdcard"
        android:layout_toRightOf="@+id/btnloadFromSdcard"
        android:text="" />

2.MainActivity活动

package com.t20.fileop;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.fileinputstream;
import java.io.filenotfoundException;
import java.io.Fileoutputstream;
import java.io.IOException;
import java.io.InputStream;
import java.io.inputstreamreader;
import java.io.outputstreamwriter;

import android.os.Bundle;
import android.APP.Activity;
import android.content.context;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.toast;

public class MainActivity extends Activity {
	private EditText meEditTextContent;
	private TextView tvContent;
	private TextView mTextViewSdcard;

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

		// 获取到相应的控件
		meEditTextContent = (EditText) findViewById(R.id.etContent);
		tvContent = (TextView) findViewById(R.id.tvContent);
		mTextViewSdcard = (TextView) findViewById(R.id.tvsdcard);
	}

	/**
	 * 保存文件到手机内存中
	 * 
	 * @param v
	 */
	public void save(View v) {
		// 文件输出流
		FileOutputStream out = null;
		// 缓冲写入器
		BufferedWriter writer = null;

		// 要写入的数据
		String str = meEditTextContent.getText().toString();

		try {
			// 用于将数据保存到指定的文件中,
			// 第一个参数是文件名,第二个参数是文件的操作模式
			// Context.MODE_PRIVATE写入的内容会覆盖原文件中的内容
			// Context.MODE_append如果文件已经存在,就往文件中追加内容,不存在就创建文件
			out = openFileOutput("data.txt", Context.MODE_PRIVATE);
			writer = new BufferedWriter(new OutputStreamWriter(out));

			// 往外写数据
			writer.write(str);
			toast.maketext(MainActivity.this, "保存成功!", Toast.LENGTH_SHORT)
					.show();
		} catch (FileNotFoundException e) {
			e.printstacktrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭流
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 载入文件信息
	 * 
	 * @param v
	 */
	public void load(View v) {
		FileInputStream in = null;
		BufferedReader reader = null;
		stringbuilder builder = new StringBuilder();

		try {
			// 读取指定文件的信息
			in = openFileInput("data.txt");
			reader = new BufferedReader(new InputStreamReader(in));
			String line = "";
			// 将读到的数据赋值给line,当line不为空的时候进行追加
			while ((line = reader.readLine()) != null) {
				builder.append(line);
			}
			// 将读取到的信息在文本中进行输出
			tvContent.setText(builder.toString());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					// 关闭输入流
					reader.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}
	}

	/**
	 * 将信息写入到sd卡中 
	 * 读写sd卡需要权限,在Androidmanifest.xml中设置android.permission.WRITE_EXTERNAL_STORAGE
	 * 
	 * @param v
	 */
	public void saveTosdcard(View v) {
		//文件输出流
		FileOutputStream fos = null;
		//要写入的数据
		String str = meEditTextContent.getText().toString();

		//设置文件路径 ,第一个参数是文件保存的路径,null放在根目录下,第二个参数是文件名
		File file = new File(getExternalFilesDir(null), "/data.txt");

		try {
			fos = new FileOutputStream(file);
			fos.write(str.getBytes());
			Toast.makeText(MainActivity.this, "保存到SD卡成功!", Toast.LENGTH_SHORT)
					.show();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					// 关闭输入流
					fos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 从sd卡中读取信息进行显示 
	 * 也需要权限,但在写入的时候已经给了权限,读取的时不需要分配权限
	 * 需要设置时在AndroidManifest.xml中设置android.permission.READ_EXTERNAL_STORAGE
	 * @param v
	 */
	public void loadFromSdcard(View v) {
		//设置文件路径,第一个参数是文件保存的路径,null放在根目录下,第二个参数是文件名
		File file = new File(getExternalFilesDir(null), "/data.txt");
		//文件输入流
		InputStream is = null;
		try {
			is = new FileInputStream(file);
			//使用缓冲来读
			byte[] buf = new byte[1024];// 每次读取1K的数据
			StringBuilder sb = new StringBuilder();
			// 当还存在数据的时候就一直读取
			while (is.read(buf) != -1) {
				sb.append(new String(buf).trim());
			}
			
			//将数据输入到文本中显示
			mTextViewSdcard.setText(sb.toString());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (is != null) {
				try {
					// 关闭输入流
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

文章最后发布于: 2018-06-23 11:26:17

相关阅读

一篇文章看明白 Android 图形系统 Surface 与 Surface

Android - SurfaceFlinger 图形系统 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android B

用户电脑接连中招:N卡新驱动请卸载后退回362.00 WHQL

NVIDIA在本周一晚些时候发布了最新款游戏驱动GeForce 364.47 WHQL正式版,宣称对《全境封锁》、《杀手》、《极品飞车19》、《奇点

msvcr71.dll文件丢失——解决办法

缺失msvcr71.dll文件处理: 下载msvcr71.dll文件 将文件复制到:C:\Windows\sysWOW64和C:\Windows\system32   下载

SVN客户端使用——访问库文件

SVN客户端使用——如何访问库文件本地选择一个空间足够大的存储盘,新建一个名为SVN_WORK 文件夹专门用来存放SVN文件,在SVN_WORK文

【Android】Phoenix OS(凤凰系统)启用root权限

最新版(2.5.9.64)的Phoenix OS将开发者选项中的root权限开关去掉了,本篇教程的来源是XDA论坛的[Root] How to root Phoenix OS wit

分享到:

栏目导航

推荐阅读

热门阅读