Activity提供了openFileOutput()方法可以用于把数据输出到文件中,同时提供了openFileInput()方法读取数据,具体实现看代码:
首先是一个自定义的MediaPlayer类:
import java.io.IOException;
import android.content.Context;
import android.media.MediaPlayer;
public class MyPlayer {
private Context mContext;
private MediaPlayer mPlayer;
public MyPlayer(Context context) {
mContext = context;
}
public void playMusic(){
mPlayer = MediaPlayer.create(mContext, R.raw.start);
mPlayer.setLooping(false);
try {
mPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mPlayer.start();
}
public void freeMusic(){
if (mPlayer != null) {
mPlayer.stop();
mPlayer.release();
}
}
}
实现file存储代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.view.KeyEvent;
import android.widget.TextView;
@SuppressLint("WorldWriteableFiles")
public class MainActivity extends Activity {
private MyPlayer myPlayer;
private boolean mbMusic;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text_view_01);
myPlayer = new MyPlayer(this);
loader();
if (mbMusic) {
myPlayer.playMusic();
mTextView.setText("当前音乐状态:开");
} else {
mTextView.setText("当前音乐状态:关");
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_UP:
mTextView.setText("当前音乐状态:开");
mbMusic = true;
myPlayer.playMusic();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
mTextView.setText("当前音乐状态:关");
mbMusic = false;
myPlayer.freeMusic();
break;
}
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK)
{
save();
if ( mbMusic )
{
myPlayer.freeMusic();
}
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
private boolean save() {
// TODO Auto-generated method stub
Properties properties = new Properties();
properties.put("mbMusic", String.valueOf(mbMusic));
try {
@SuppressWarnings("deprecation")
FileOutputStream foStream = openFileOutput("music.cfg", Context.MODE_WORLD_WRITEABLE);
properties.store(foStream, null);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
private void loader() {
// TODO Auto-generated method stub
Properties pro = new Properties();
try {
FileInputStream fiStream = openFileInput("music.cfg");
pro.load(fiStream);
mbMusic = Boolean.valueOf(pro.getProperty("mbMusic"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
介绍一下Android提供的读写模式:
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 如果希望文件被其他应用读和写,可以传入: openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。 l
Context.MODE_PRIVATE = 0 Context.MODE_APPEND = 32768 Context.MODE_WORLD_READABLE = 1 Context.MODE_WORLD_WRITEABLE = 2