Android文件的保存(本地和SD卡)与读取
2016-05-22 00:00
447 查看
这个是资源的目录参考(看的时候一目了然):
首先是布局文件:
效果图:
代码部分:
activity_main.xml
类MainActivity.java代码:
自定义的FileService类:
代码如下:文件默认写入程序的files中(文件一般在目录的data/data/程序包名/files/文件名,如果使用真机做测试,如果手机没有root并且该文件权限没有进行可读写设置,在eclipse中的DDMS中是打不开data目录的)
测试类:FTest.java,主要测试文件的读取,
代码如下:
然后在AndroidManifest.xml进行配置单元测试:
在日志输出过滤后就可以看到刚刚输入保存文件的内容
首先是布局文件:
效果图:
代码部分:
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>
在日志输出过滤后就可以看到刚刚输入保存文件的内容
相关文章推荐
- Android学习之简单的拍照功能
- android连接sqlite进行简单的增删改查和事务管理
- Android单元测试
- Android中颜色的表示
- Android使用pull解析器解析xml文件
- Android计算器功能的实现
- ubuntu环境开发android时候无法找到aapt
- 【自用】canvas.drawText()中y坐标的位置问题,Android(java)的一个坑。。附Kotlin。。
- Android 之动态加载代码
- Android Studio使用Lambda
- Android进阶学习-Canvas使用7行代码自定义圆形头像
- Android进阶学习-实现卡券效果
- Android进阶学习--十几行代码实现美女撕衣服效果
- Android进阶学习-着色器/渲染器
- Android进阶学习-实现图片倒影的效果
- Android中如何为Fragment中的按钮添加监听事件
- Learning Handler
- Android day4:Java的类型转换、Scanner、错误类型
- Android RxJava使用场景小结
- android搜索框功能实现