android 数据存储之 Files

Android中可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。同样,在默认状态下,文件是不能在不同的程序之间共享的。用文件来存储数据可以通过 openFileOutput方法打开一个文件(如果这个文件不存在就自动创建这个文件),通过load方法来获取文件中的数据,通过deleteFile方法可以删除一个指定的文件。

现在我们就用文件的方式实现我们的上一次写的保存音乐状态的例子。这个例子在这里,可以看一下--》[url]http://byandby.iteye.com/blog/833292[/url] 我们这里就换一种实现方式,但是要达到的目的是一样的。首先,在退出应用程序之前,通过我们自己实现的一个save方法来保存这些数据(音效状态),然后,在应用程序启动时,通过一个load方法来读取这些数据。下边我们就来看看代码吧,图就不上了 大家去上一篇文章看吧。

MIDIPlayer类主要用来开启和关闭音乐服务
package com.yarin.android.Examples_06_02;

import java.io.IOException;
import android.content.Context;
import android.media.MediaPlayer;

public class MIDIPlayer {
public MediaPlayer playerMusic = null;
private Context mContext = null;

public MIDIPlayer(Context context) {
mContext = context;
}

/* 播放音乐 */
public void PlayMusic() {
/* 装载资源中的音乐 */
playerMusic = MediaPlayer.create(mContext, R.raw.start);

/* 设置是否循环 */
playerMusic.setLooping(true);
try {
playerMusic.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
playerMusic.start();
}

/* 停止并释放音乐 */
public void FreeMusic() {
if (playerMusic != null) {
playerMusic.stop();
playerMusic.release();
}
}
}


Activity01 类
package com.yarin.android.Examples_06_02;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;

public class Activity01 extends Activity {

private MIDIPlayer mMIDIPlayer = null;
private boolean mbMusic = false;
private TextView mTextView = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mTextView = (TextView) this.findViewById(R.id.TextView01);

mMIDIPlayer = new MIDIPlayer(this);

/* 读取文件数据 */
load();

if (mbMusic) {
mTextView.setText("当前音乐状态:开");
mbMusic = true;
mMIDIPlayer.PlayMusic();
} else {
mTextView.setText("当前音乐状态:关");
}

}

public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
mTextView.setText("当前音乐状态:开");
mbMusic = true;
mMIDIPlayer.PlayMusic();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
mTextView.setText("当前音乐状态:关");
mbMusic = false;
mMIDIPlayer.FreeMusic();
break;
}
return true;
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
/* 退出应用程序时保存数据 */
save();

if (mbMusic) {
mMIDIPlayer.FreeMusic();
}
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}

/* 装载、读取数据 */
void load() {
/* 构建Properties对对象 */
Properties properties = new Properties();
try {
/* 开发文件 */
FileInputStream stream = this.openFileInput("music.cfg");
/* 读取文件内容 */
properties.load(stream);
} catch (FileNotFoundException e) {
return;
} catch (IOException e) {
return;
}
/* 取得数据 */
mbMusic = Boolean.valueOf(properties.get("bmusic").toString());
}

/* 保存数据 */
boolean save() {
Properties properties = new Properties();

/* 将数据打包成Properties */
properties.put("bmusic", String.valueOf(mbMusic));
try {
FileOutputStream stream = this.openFileOutput("music.cfg",
Context.MODE_WORLD_WRITEABLE);

/* 将打包好的数据写入文件中 */
properties.store(stream, "");
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
}

return true;
}
}


[color=green] 注意:如果使用绝对路径来存储文件,那么在其它应用程序中一样不能通过这个绝对路径来访问和操作该文件。[/color]

同样,我们知道了通过Preferences 存储的数据保存在 shared_prefs文件夹下,那么如果我们没有指定路径的文件存储方式,数据又保存在什么地方呢?如果我们采用了文件存储数据的方式,系统就会在和 shared_prefs 相同的目录中产生一个名为 files 的文件夹,它下面的文件就是我们通过Files 存储数据的文件。

[img]http://dl.iteye.com/upload/attachment/360868/46de795f-5df5-344b-ae6c-3d7d44b751b5.jpg[/img]

[color=green] 如果在开发一个应用程序时,需要通过加载一个文件的内容来初始化程序,就可以在编译程序之前,在res/raw/tempFile中建立一个static 文件,这样在程序中通过Resources.openRawResources(R.raw.文件名) 方法同样返回一个InputStream 对象,直接读取文件内容。[/color]

源码见附件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值