Android实现把文件存放在SDCard的方法
本文实例讲述了android实现把文件存放在sdcard的方法。分享给大家供大家参考。具体如下:
使用activity的openfileoutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在sdcard。 sdcard是干什么的?你可以把它看作是移动硬盘或u盘。
在模拟器中使用sdcard,你需要先创建一张sdcard卡(当然不是真的sdcard,只是镜像文件)。创建sdcard可以在eclipse创建模拟器时随同创建,也可以使用dos命令进行创建,如下:在dos窗口中进入android sdk安装路径的tools目录,输入以下命令创建一张容量为2g的sdcard,文件后缀可以随便取,建议使用.img:
mksdcard 2048m d:\androidtool\sdcard.img
注意:在程序中访问sdcard,你需要申请访问sdcard的权限。
在androidmanifest.xml中加入访问sdcard的权限如下:
<!-- 在sdcard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.mount_unmount_filesystems"/>
<!-- 往sdcard写入数据权限 -->
<uses-permission android:name="android.permission.write_external_storage"/>
要往sdcard存放文件,程序必须先判断手机是否装有sdcard,并且可以进行读写。
注意:访问sdcard必须在androidmanifest.xml中加入访问sdcard的权限
if(environment.getexternalstoragestate().equals(environment.media_mounted)){ file sdcarddir = environment.getexternalstoragedirectory();//获取sdcard目录 file savefile = new file(sdcarddir, "ljq.txt"); fileoutputstream outstream = new fileoutputstream(savefile); outstream.write("abc".getbytes()); outstream.close(); }
environment.getexternalstoragestate()方法用于获取sdcard的状态,如果手机装有sdcard,并且可以进行读写,
那么方法返回的状态等于environment.media_mounted。
environment.getexternalstoragedirectory()方法用于获取sdcard的目录,当然要获取sdcard的目录,你也可以这样写:
file sdcarddir = new file("/mnt/sdcard"); //获取sdcard目录
file savefile = new file(sdcarddir, "ljq.txt");
//上面两句代码可以合成一句: file savefile = new file("/mnt/sdcard/ljq.txt");
fileoutputstream outstream = new fileoutputstream(savefile);
outstream.write("abc".getbytes());
outstream.close();
案例
main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 相对布局 --> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/filename" android:id="@+id/filenamelable" /> <edittext android:layout_width="250px" android:layout_height="wrap_content" android:layout_torightof="@id/filenamelable" android:layout_aligntop="@id/filenamelable" android:layout_marginleft="10px" android:text="ljq.txt" android:id="@+id/filename" /> </relativelayout> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/content" /> <edittext android:layout_width="fill_parent" android:layout_height="wrap_content" android:minlines="3" android:id="@+id/content" /> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:id="@+id/button" /> <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_torightof="@id/button" android:layout_aligntop="@id/button" android:layout_marginleft="10px" android:minlines="3" android:text="@string/readbutton" android:id="@+id/readbutton" /> </relativelayout> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/resultview" /> </linearlayout>
strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello world, fileactivity!</string> <string name="app_name">数据保存</string> <string name="filename">文件名称</string> <string name="content">文件内容</string> <string name="button">保存</string> <string name="readbutton">读取内容</string> <string name="error">保存失败</string> <string name="success">保存成功</string> </resources>
fileservice工具类:
package com.ljq.service; import java.io.bytearrayoutputstream; import java.io.inputstream; import java.io.outputstream; public class fileservice { /** * 保存数据 * * @param outputstream * @param content * @throws exception */ public static void save(outputstream outputstream, string content) throws exception { outputstream.write(content.getbytes()); outputstream.close(); } /** * 读取数据 * * @param inputstream * @return * @throws exception */ public static string read(inputstream inputstream) throws exception { bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream(); // 往内存写数据 byte[] buffer = new byte[1024]; // 缓冲区 int len = -1; while ((len = inputstream.read(buffer)) != -1) { bytearrayoutputstream.write(buffer, 0, len); } byte[] data = bytearrayoutputstream.tobytearray(); // 存储数据 bytearrayoutputstream.close(); inputstream.close(); return new string(data); } }
sdcardactivity类:
package com.ljq.sdcard; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.inputstream; import android.app.activity; import android.os.bundle; import android.os.environment; import android.util.log; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast; import com.ljq.service.fileservice; public class sdcardactivity extends activity { private final string tag = "fileactivity"; private edittext filenametext; private textview resultview; private edittext contenttext; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); filenametext = (edittext)this.findviewbyid(r.id.filename); contenttext = (edittext)this.findviewbyid(r.id.content); resultview = (textview)this.findviewbyid(r.id.resultview); button button = (button)this.findviewbyid(r.id.button); button.setonclicklistener(listener); button readbutton = (button)this.findviewbyid(r.id.readbutton); readbutton.setonclicklistener(listener); } private view.onclicklistener listener = new view.onclicklistener() { public void onclick(view v) { button button = (button) v; string filename = filenametext.gettext().tostring(); // environment.getexternalstoragedirectory()等价于new file("/sdcard")---->获取sdcard目录 //获取sdcard目录 //file file = new file("/sdcard" + filename); file file = new file(environment.getexternalstoragedirectory(), filename); switch (button.getid()) { case r.id.button: int resid = r.string.success; // 默认成功 string content = contenttext.gettext().tostring(); //sdcard存在并且可以读写 if (environment.getexternalstoragestate().equals(environment.media_mounted)) { try { fileoutputstream fileoutputstream = new fileoutputstream(file); fileservice.save(fileoutputstream, content); } catch (exception e) { log.e(tag, e.tostring()); resid = r.string.error; } toast.maketext(sdcardactivity.this, resid, toast.length_long).show(); }else { toast.maketext(sdcardactivity.this, "sdcard不存在或写保护", toast.length_long).show(); } break; case r.id.readbutton: try { inputstream inputstream= new fileinputstream(file); string text = fileservice.read(inputstream); resultview.settext(text); } catch (exception e) { log.e(tag, e.tostring()); toast.maketext(sdcardactivity.this, "读取失败", toast.length_long).show(); } break; } } }; }
清单文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ljq.sdcard" android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".sdcardactivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> <uses-sdk android:minsdkversion="7" /> <!-- 在sdcard中创建与删除文件权限 --> <uses-permission android:name="android.permission.mount_unmount_filesystems" /> <!-- 往sdcard写入数据权限 --> <uses-permission android:name="android.permission.write_external_storage" /> </manifest>
运行结果:
希望本文所述对大家的android程序设计有所帮助。
上一篇: 想一年四季都吃秋葵,怎么晒秋葵才能晒好
下一篇: 快来看看大雁怎么做好吃
推荐阅读
-
Android编程实现使用webView打开本地html文件的方法
-
Android编程实现对文件夹里文件排序的方法
-
Android实现内存中数据保存到sdcard的方法
-
Android编程使用HTTP协议与TCP协议实现上传文件的方法
-
Android编程实现使用webView打开本地html文件的方法
-
Android实现下载zip压缩文件并解压的方法(附源码)
-
Android编程使用HTTP协议与TCP协议实现上传文件的方法
-
Android实现下载zip压缩文件并解压的方法(附源码)
-
Android编程获取sdcard音乐文件的方法
-
Android开发实现读取assets目录下db文件的方法示例