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

应用名称:文件编辑器

应用说明:

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


应用总结:

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>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值