您的位置:首页 > 移动开发 > Android开发

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

2012-03-25 04:27 405 查看
应用名称:文件编辑器

应用说明:

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

应用总结:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: