Android--入门---15---(文件保存 & 读取 & 权限)

原创 2012年03月25日 04:27:49

应用名称:文件编辑器

应用说明:

此应用将在界面输入的内容保存至手机,并能够从手机中查出显示再界面


应用总结:

1.在Android中的文件操作同样使用J2SE中的IO流操作,只不过Android系统封装更为快速的获取文件流的方法;

2.所有应用的生成的文件都在对应的应用的 data | data | files 文件夹下;

3.在 android 的应用中异常的处理在Activity中,相当与J2SE的view 处理异常;

4.抛出异常可以抛出 throwable 接口 ,之前没有想过,强悍!

5.UT 中在每个测试方法中都要初始化要使用的对象;

6.当再创建String是默认的字符集编码为Android系统的字符集;

7.Activity 在Android 相当与Controller 去掉用 Service 的业务方法实现相应的功能;

8.Toast.LENGTH_SHORT 为整数(int)

9.context.getFilesDir();//获得当前应用目录下的files文件夹
   context.getCacheDir();//获得当前应用目录下的cache文件夹

10.文件的操作权限有四种:

               -rwxrwxrwx   : - (表示是文件类型) rwx:本应用的有读写执行权限  rwx  :表示组有读写执行权限   rwx  :表示其他应用有读写执行权限

                r  : 4

                w : 2

                x  : 1

   chomd 777 :表示修改权限为所有用户都可读写执行



               1.MODE_PRIVATE  : 尽允许本应用操作该文件 & 覆盖式写入          other application have no permission

               2.MDOE_APPEND  :尽允许本应用操作该文件 & 追加式写入        other application have no permission

               3.MODE_WORLD_READABLE  :可以被其他文件读取的

               4.MODE_WORLD_WRITEABLE  :可以被其他文件读取 ,但是是不可以被其他应用写入的

注意:

1.设置某个文件的权限被释放给所有应用则使用 MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE  //或者 3

2.设置某个文件释放权限的MODE_WORLD_WRITEABLE 模式的文件以追加的方式写入的话,

   可以在输出流种添加一个true 参数 :fos = new FileOutputStream(file,true);


文件清单:

1.FileActivity

2.FileService

3.FileServiceTest

4.AndroidManifest.xml

5.main.xml

1.FileActivity

package com.hisoft.qyq;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.hisoft.qyq.R;
import com.hisoft.service.FileService;

public class FileActivity extends Activity {
    
    private Button save;
    private EditText fileName;
    private EditText fileContent;
    private FileService service;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    private void init() {
        
        fileName = (EditText) findViewById(R.id.filename);
        fileContent = (EditText) findViewById(R.id.text);
        save = (Button) findViewById(R.id.save);
        save.setOnClickListener(new ButtonOnclickListener());
        
    }
    
    private  final class ButtonOnclickListener implements View.OnClickListener{  //final 内部类不需要被继承

        @Override
        public void onClick(View v) {
            String fileName_str = fileName.getText().toString();
            String fileContent_str = fileContent.getText().toString();
            service = new FileService(getApplicationContext());

//必须先检查该终端是否存在SDCard & 与权限是否放开
              if (Environment.MEDIA_MOUNTED.equals(Environment
                    .getExternalStorageState())) {
                try {
                    // service.save(fileName_str,fileContent_str);;//调用service中的保存文件至手机存储为相应的应用分配的空间
                    service.saveToSDCard(fileName_str, fileContent_str);//调用service中的保存文件至SDCard
                } catch (Throwable e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), R.string.fail, 1);
                }
                Toast.makeText(getApplicationContext(), R.string.success, 1)
                        .show();
            } else {
                Toast.makeText(getApplicationContext(), R.string.SDCardError, 1)
                        .show();
            }
        
    }
}

2.FileService 

package com.hisoft.service;

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

import android.content.Context;

public class FileService {

    private FileOutputStream fos;
    ByteArrayOutputStream baos;
    private Context context;

    public FileService(Context context) {
        this.context = context;
    }

    /**
     * fileName_str 文件名称 fileContent_str 文件内容
     */
    public void save(String fileName_str, String fileContent_str)
            throws Throwable {
        // exception 抛给Activity处理
        fos = context.openFileOutput(fileName_str, Context.MODE_PRIVATE);//默认保存在手机自带存储中
        fos.write(fileContent_str.getBytes());
        fos.close();
        /*
         * name 只接受文件名称,不须写路径 mode 是定义文件的使用权限
         * Context.MODE_PRIVATE:创建出来的文件只有本应用使用(覆盖式写入)
         */
    }

    public void saveToSDCard(String fileName_str, String fileContent_str) throws Throwable{
        
        File file = new File(Environment.getExternalStorageDirectory(), fileName_str);

//因为android 升级导致系统目录的变化所以尽量使用Environment.getExternalStorageDirectory()方法获得路径


        fos = new FileOutputStream(file);
        fos.write(fileContent_str.getBytes());
        fos.close();
        
    }


    public String read(String fileName) throws Throwable {

        FileInputStream fis = context.openFileInput(fileName);
        byte[] data = null;
        byte[] buffer = new byte[1024];// 设置一个字节缓冲区

        // StringBuffer buffer = new StringBuffer();
        baos = new ByteArrayOutputStream();//创建一个内存字节数组
        int len = 0;
        while ((len = fis.read(buffer, 0, buffer.length)) != -1) {

            baos.write(buffer, 0, len);// 将每一条数据写入内存数组
            // buffer = buffer.append(content);
            data = baos.toByteArray();// 调出内存中的字节数组
        }
        fis.close();
        // return buffer.toString();
        return new String(data, "UTF-8");// 转为String类型时字符集定义为UTF-8
    }

}
3.FileServiceTest

package com.hisoft.test;

import android.test.AndroidTestCase;

import com.hisoft.service.FileService;

public class FileServiceTest extends AndroidTestCase {

    public void testSave() throws Throwable {

        FileService service = new FileService(this.getContext());
        service.save("fn.xml", "nothing");
        
    }

    public void testRead() throws Throwable {
        
        FileService service = new FileService(this.getContext());
        String result = service.read("file.xml");
        assertEquals("这是我的文件!", result);
        
    }

}

4.AndroidManifest.xml 


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

    <uses-sdk android:minSdkVersion="7" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.hisoft.qyq" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".FileActivity"
            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>

</manifest>


5.main.xml 

<?xml version="1.0" encoding="utf-8"?>
<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/filename"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/content" />
    
     <EditText
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="355dp" />

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

</LinearLayout> 


6.String.xml 


<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">file</string>
    <string name="hello">Hello World, FileActivity!</string>
    <string name="filename">文件名:</string>
    <string name="content">内容</string>
    <string name="save">保存</string>
    <string name="success">保存成功!</string>
   <string name="fail">保存失败!</string>
</resources>





相关文章推荐

android入门开发之linux文件权限(六)

前言说到权限,相信大部分人都用的还是windows系统,既然说到了权限这一块,我就不得不吐槽windows权限做的真是垃圾中的战斗机,没有比windows权限做的更垃圾的了。相反,linux系统下的权...

15 Linux更改权限解决新建用户不能读写创建文件/文件夹的问题

 在linux下新建一个用户之后可能会遇到不能读写、创建文件/文件夹的问题,这通常是由于用户权限不够导致的,此时通常有两种比较简单的解决办法 1、在所有的命令之前增加sudo获得r...

Linux--15:Linux文件权限详解

原文:http://hi.baidu.com/skyforum/item/9946ef57b371789608be1747 一、文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限,这...
  • dscyw
  • dscyw
  • 2013年08月12日 11:06
  • 852

Android开发入门之文件的保存与读取

很多时候我们开发的软件需要对处理后的数据进行存储,以供再次访问。Android为数据存储提供了如下几种方式: 文件 SharedPreferences(参数) SQLite数据库 内容提供者(Cont...

android,保存文件到内存和读取,文件访问权限,文件模式

/** 上下文对象,要初始化 */ Context mContext; /** 私有模式 */ public static final int FIlE_MODE_PRIVATE = 0; /...

Android项目笔记二:用户自定义保存路径+文件列表显示+权限显示

首先在AndroidManifest.xml添加权限: uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAG...

解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件

SQLiteOpenHelper是Android框架为我们提供的一个非常好的数据库打开、升级与关闭的工具类。但是这个工具类会自动把db文件创建到“ /data/data/com.*.*(package...

android文件管理器,通知界面修改;4.4以后读取sd卡也需要权限;ctrl+shift+f注意在英文下;取消屏幕闪烁

主界面     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent" ...

【Android基础入门〖15〗】Shape圆角输入框

1 简介 本文主要介绍通过 shape 来设置 EditText 的圆角。   2 shape 的设置   shape_life_search.xml 放在 res/drawable 文件夹内 ...
  • mkr127
  • mkr127
  • 2013年09月26日 08:49
  • 4924
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android--入门---15---(文件保存 & 读取 & 权限)
举报原因:
原因补充:

(最多只允许输入30个字)