文件
SharedPreferences(参数)
SQLite数据库
内容提供者(Content provider)
网络
Activity提供了openFileOutput()方法可以用于把数据输出到文件中,openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录。openFileOutput()方法的第二参数用于指定操作模式有四种模式,分别为:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
For example:
public void save(String fileName, String content, int mode) {
// 记住密码
try {
// 通过openFileputStream打开文件
FileOutputStream fos = context.openFileOutput(fileName, mode);
fos.write(content.getBytes());
fos.flush();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String[] readFile(String fileName) {
String[] split = null;
File file = new File(context.getFilesDir(),fileName);
if (file.exists()) {
try {
// 根据文件创建出文件的输入流
InputStream is = new FileInputStream(file);
// 通过工具类读取文件的内容
String value = StreamTools.streamToStr(is);
// 按照分号进行拆分
split = value.split(";");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 记得返回声明的对象
return split;
}
调用方法:internalStorage.save(fileName, content,Context.MODE_PRIVATE);
String values[] = internalStorage.readFile(fileName);
我们也可以将file文件保存到外部的存储设备中,如SDCrad:
在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
通过方法调用的不同,存放路径可分公有文件和私密文件。公有文件可供所有人读写,但私密文件却只能够给自己看到。当应用被卸载时,公有文件依然会保留,而私密文件会随之被删除。
公有文件的方法:
For example:
public void save(String dir,String content,String fileName) {
//演示公共文件
File sdCardDir = Environment.getExternalStoragePublicDirectory(dir);
File file = new File(sdCardDir,fileName);
try {
FileOutputStream raf = new FileOutputStream(file);
raf.write(content.getBytes());
raf.flush();
raf.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String[] readFile(String dir, String fileName) {
//声明返回值
String[] split = null;
File pdFile = new File(Environment.getExternalStoragePublicDirectory(dir), fileName);
if (pdFile.exists()) {
try {
// 根据文件创建出文件的输入流
InputStream is = new FileInputStream(pdFile);
// 通过工具类读取文件的内容
String value = StreamTools.streamToStr(is);
// 按照分号进行拆分
split = value.split(";");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return split;
}
调用的方法:String values[] = internalStorage.readFile(Environment.DIRECTORY_DOWNLOADS,fileName);
internalStorage.save(Environment.DIRECTORY_DOWNLOADS,content,fileName);
私有文件的方法:
For example:
public void save(String dir,String content,String fileName) {
//演示公共文件
File sdCardDir = context.getExternalFilesDir(dir);
File file = new File(sdCardDir,fileName);
try {
FileOutputStream raf = new FileOutputStream(file);
raf.write(content.getBytes());
raf.flush();
raf.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String[] readFile(String dir, String fileName) {
//声明返回值
String[] split = null;
File pdFile = new File(context.getExternalFilesDir(dir), fileName);
if (pdFile.exists()) {
try {
// 根据文件创建出文件的输入流
InputStream is = new FileInputStream(pdFile);
// 通过工具类读取文件的内容
String value = StreamTools.streamToStr(is);
// 按照分号进行拆分
split = value.split(";");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return split;
}
调用的方法:String values[] = internalStorage.readFile(Environment.DIRECTORY_DOWNLOADS,fileName);
internalStorage.save(Environment.DIRECTORY_DOWNLOADS,content,fileName);