文档章节

Android文件的保存(本地和SD卡)与读取

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 926
阅读 19
收藏 0
点赞 2
评论 0

这个是资源的目录参考(看的时候一目了然):



首先是布局文件:

效果图:


代码部分:

activity_main.xml

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

    <TextView 
        android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="@string/fileName"
    	/>
    
    <EditText 
        android:id="@+id/fileNameEdit"
        android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
        />
    
    <TextView 
        android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="@string/fileContent"
    	/>
    
    <EditText 
        android:id="@+id/fileContentEdit"
        android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:minLines="3"
        />
    <Button 
        android:id="@+id/saveBtn"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="@string/save"
        />
</LinearLayout>

类MainActivity.java代码:

package org.dyb.file;

import org.dyb.service.FileService;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
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 MainActivity extends Activity {
	
	private EditText fileName;//文件名编辑器
	private EditText fileContent;//文件内容编辑器
	private Button save;//保存按钮
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//从R中获取文件名资源
		fileName=(EditText) findViewById(R.id.fileNameEdit);
		//从R中获取文件内容资源
		fileContent=(EditText) findViewById(R.id.fileContentEdit);
		//保存按钮资源获取
		save=(Button) findViewById(R.id.saveBtn);
		//设置单击事件进行文件保存,使用内部类接口实现
		save.setOnClickListener(new SaveOnclick());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	//设置单击事件进行文件保存,使用内部类接口实现
	private class SaveOnclick implements View.OnClickListener{
		@Override
		public void onClick(View v) {
			String fileNameString=fileName.getText().toString();
			String fileContentString=fileContent.getText().toString();
			//自定义FileService类并添加save方法,需要传入content
			FileService fs=new FileService(MainActivity.this);
			try{
				//将文件保存在程序目录中
				fs.save(fileNameString, fileContentString);
				
				//将文件保存在SD卡中,去掉注释便可用
				if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
					fs.saveToSDCard(fileNameString, fileContentString);
				}else{
					Toast.makeText(getApplicationContext(), "SD卡不存在或者写保护", Toast.LENGTH_SHORT).show();
				}
				
				Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();
			}catch(Exception e){
				Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
			}
		}
	}	
}



自定义的FileService类:

代码如下:文件默认写入程序的files中(文件一般在目录的data/data/程序包名/files/文件名,如果使用真机做测试,如果手机没有root并且该文件权限没有进行可读写设置,在eclipse中的DDMS中是打不开data目录的)

package org.dyb.service;

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

import android.content.Context;
import android.os.Environment;

public class FileService {
	private Context context;
	
	public FileService(){
	}
	
	public FileService(Context context){
		this.context=context;
	}
	//保存到SD卡
	public void saveToSDCard(String fileNameString,String fileContentString) throws Exception{
		//Environment.getExternalStorageDirectory()获取系统SD卡目录
		File file=new File(Environment.getExternalStorageDirectory(),fileNameString);
		FileOutputStream outStream=new FileOutputStream(file);
		outStream.write(fileContentString.getBytes());
		outStream.close();
	}
	
	public void save(String fileNameString,String fileContentString) throws Exception{
		//文件输出流
		//其中两个参数一个是文件名一个是文件的权限,Context.MODE_PRIVATE代表只允许本程序读写
		FileOutputStream outStream=context.openFileOutput(fileNameString,Context.MODE_PRIVATE);
		//以字节流传入
		outStream.write(fileContentString.getBytes());
		outStream.close();
	}
	
	public String read(String fileNameString)throws Exception{
		FileInputStream inStream=context.openFileInput(fileNameString);
		//内存字节数组输出流,主要先将每次读取的字节流存入到内存中然后在进行输出
		ByteArrayOutputStream outStream=new ByteArrayOutputStream();
		//每次读取1024
		byte[] buffer=new byte[1024];
		int len=0;
		while((len=inStream.read(buffer))!=-1){
			outStream.write(buffer, 0, len);
		}
		//把内存中的数据转换为字节流
		byte[] data = outStream.toByteArray();
		//转换成字符串返回
		return new String(data);
	}
}



测试类:FTest.java,主要测试文件的读取,

代码如下:

package org.dyb.test;

import org.dyb.service.FileService;

import android.test.AndroidTestCase;
import android.util.Log;

public class FTest extends AndroidTestCase {
	public void testread()throws Exception{
		FileService fs=new FileService(this.getContext());
		Log.i("junit", fs.read(<span style="color:#3366ff;">"d.txt"</span>));//文件名,自己可以修改我保存文件的时候用的是d.txt
	}
}

然后在AndroidManifest.xml进行配置单元测试:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.dyb.file"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="org.dyb.file.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <uses-library android:name="android.test.runner"/>
    </application>
    
    <!-- 在SD卡中写入权限 -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 在SD卡中创建与删除权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    
	
	<instrumentation android:name="android.test.InstrumentationTestRunner" 
	    android:targetPackage="org.dyb.file" android:label="test for my app"/>
	
</manifest>



在日志输出过滤后就可以看到刚刚输入保存文件的内容

本文转载自:http://blog.csdn.net/bq1073100909/article/details/37887735

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
android学习笔记9--------------SD卡读写文件

把文件存入SD卡中 首先加入读写权限 SD卡创建与删除文件权限 <uses-permission android:name="android.permission.MOUNTUNMOUNTFILESYSTEMS"></uses-permission> SD卡写入数据权限 <uses-pe......

晨曦之光
2012/03/15
0
0
android学习笔记8--------------数据的存储与访问(2)

转载注明出处:袁方的技术博客 http://blog.csdn.net/yf210yf 承接 android学习笔记6----------数据的存储与访问(1) 最后: Activity的设计。 效果图: import java.io.IOException;impor...

晨曦之光
2012/03/15
0
0
说说 Android 中如何使用摄像头和相册

很多 APP 应用都有用户头像功能,用户既可以调用摄像头马上拍一张美美的自拍,也可以打开相册选取一张心仪的照片作为头像。 1 调用摄像头 布局文件: 活动类代码: getExternalCacheDir() 可...

deniro
05/26
0
0
Android平台通用安全问题分析及策略(一)

©著作权归作者所有:来自51CTO博客作者samsunglinux的原创作品,如需转载,请注明出处,否则将追究法律责任 安全Android移动平台信息安全 5 分享 微博QQ微信 收藏 上一篇:译著《Fedora和R...

samsunglinux
07/02
0
0
安卓应用安全指南 4.6.2 处理文件 规则书

安卓应用安全指南 4.6.2 处理文件 规则书 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 遵循以下规则: 4.6.2.1 文件原则上必须创建...

apachecn_飞龙
03/22
0
0
start Android 内外存彻底研究

一部Android手机存在不同的存储空间类型。拿我的LG Optimus举例,他有512MB ROM和512MB RAM,还有一个SDHC的扩展槽,标配2G内存卡,最大可支持32G内存卡。那么这些数据都是什么意思呢? RAM ...

LiangX
2012/02/19
0
0
android模拟器中sdcard的创建

Android模拟器SD Card映像文件使用方法 2010-06-11 14:07:05| 分类: Android |字号 订阅 Path: D:android-sdk-windowsandroid-sdktools 1. mksdcard命令 用cmd进入SDK的Tools目录,执行mks...

才沐木
2012/07/24
0
0
析:自定义适配器实现Grid View和Gallery碰到到问题。

在: http://www.oschina.net/code/snippet1512879426上学习grid view,不过做学习代码到过程中碰到一下问题: 1.运行起来之后,APP会异常结束; 2.copy数据到模拟终端到sdcard中; 问题1.运...

垂盆草
2012/08/18
0
0
Android:文件下载和写入SD卡学习小结

今天刚刚学习完Android文件下载和写入SD卡的,随即做一个小结,以供以后学习查阅: 一、文件下载 Android开发中,有时需要从网上下载一些资源以供用户使用,Android API中已经提供了很多直接...

Jonson
2013/06/02
0
1
Android swap分区作用及swapper软件设置方法

最近折腾android系统比较多,也有了些心的,故有了这篇文章。   android的swap分区与linux相同,都是用于数据交换的,类似于windows上的虚拟内存。合理设置swap能提升系统的速度,降低系统...

张淑珍
2013/03/29
0
19

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何把你的Linux系统变的更加安全

做为一个小白,以为自己懂了点Linux知识,会搭建Linux各种服务就觉得自己牛的不要要的。在我们团队里面,我将使用了一台破电脑搭建Linux服务器,上面跑着Ftp服务存放着资源,ssh服务可以远程...

问题终结者
1分钟前
0
0
lombok的使用和原理

一、项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为了省去我们手...

颖辉小居
1分钟前
0
0
rsync至服务同步-系统日志-screen

rsync: 服务同步;配置文件:/etc/rsyncd.conf 默认端口:873 服务启动:rsync --daemon rsync -av /root/1.txt 192.168.1.2::test/2.txt (test为模块名称) /etc/rsync.conf配置样例: #指定...

ZHENG-JY
3分钟前
0
0
读取文件中内容转换成字符串

package com.lieni.ruyu.api.xmlTool; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Unsuppo......

newdeng
3分钟前
0
0
《PHP和MySQL Web 开发》 第8章 设计Web数据库

LCL WARNING 这是我学习《PHP和MySQL Web 开发》的读书笔记,一些重要的知识点我会记录下来,当然只会写我觉得重要的。 如果有幸有人看到这个学习笔记了,你要结合着书看,不要光看这个笔记。...

十万猛虎下画山
10分钟前
0
0
Spring+jpaNo transactional EntityManager available

TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务i......

wpfc
11分钟前
0
0
八幅漫画理解使用JSON Web Token设计单点登录系统

八幅漫画理解使用JSON Web Token设计单点登录系统 Sep 07, 2015 in Engineering 上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。...

祖冲之
13分钟前
0
0
Spring框架中的设计模式(三)

Spring框架中的设计模式(三) 原创: 瑞查德-Jack 在之前的两篇文章中,我们看到了一些在Spring框架中实现的设计模式。这一次我们会发现这个流行框架使用的3种新模式。 本文将从描述两个创意...

瑞查德-Jack
16分钟前
1
0
[MicroPython]TPYBoard智能小车“飞奔的TPYBoard装甲一号”

智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车能够实时显示时间、速度、里程,具...

bodasisiter
18分钟前
0
0
桌面虚拟化VDI(Virtual Desktop Infrastructure)

为了保证员工(客户)不把公司的资料复制、传输给别人。可以把员工平时办公放在服务器上做。所以使用桌面虚拟化。就是把一个服务器虚拟出很多桌面系统(如:windows)。 桌面虚拟化最大的优势...

王坤charlie
25分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部