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

Android数据存储方式之文件存储详解

2016-10-31 19:52 603 查看
                 关于Android的数据存储方式有五种,分别是 1. 使用SharedPreferences存储方式(偏好设置), 2. 文件存储数据, 3. SQLite存储方式, 4. 使用ContentProvider存储数据, 5. 网络存储数据 。

                 今天主要讲解一下文件的存储方式,在项目的很多地方都会用到文件存储(比如 : 存放客户端固定配置信息 , 从网络下载文件等等)。

                 Context提供了2种方法打开数据文件里的文件IO流FileInputStream ,FileOutputStream来操作文件。

                 先看使用方法:context.openFileInput(String FileName);FileName 为文件名;

                                         context.openFileOutput(String FileName , int mode);FileName
为文件名; mode 为文件的打开模式。

                 mode有一下选项:

                                                1.MODE_PRIVATE:为默认操作模式 , 代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原来的内容,如果想把新写入的内容追加到原文件中,则可以使用MODE_APPEND模式

                                               2.MODE_APPEND:该模式会检查文件是否存在,存在就往文件中追加内容,否则就新建文件。

                                                3.MODE_WORLD_PEADABLE:表示当前文件可以被其他应用读取。

                                                4.MODE_WORLD_WRITEABLE : 表示当前文件可以被其他应用写入。

                 Context还提供了几个重要方法:

                                                 1.getDir(String name,int mode) : 在应用程序的数据文件下获取或者创建name对应的子目录。              

                                                 2.File getFileDir() : 获取该应用程序的数据文件夹的绝对路径。

                                                 3.String[ ] fileList() : 返回该应用数据文件夹的全部文件。 

                                      



                  示例代码:TestActivity :

public class TestActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
}

/**
* 写入文件
*
* @param content
*/
public void writeFiles(String content) {
// 步骤1:获取输入值
if (content == null)
return;
try {
// 步骤2:创建一个FileOutputStream对象,MODE_APPEND追加模式,默认为MODE_PRIVATE
FileOutputStream fos = openFileOutput("message.txt", MODE_APPEND);
// 步骤3:将获取过来的值放入文件
fos.write(content.getBytes());
// 步骤4:关闭数据流
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 读出文件
*
* @param content
*/
public String readFiles() {
try {
FileInputStream inStream = this.openFileInput("message.txt");
byte[] buffer = new byte[1024];
int hasRead = 0;
StringBuilder sb = new StringBuilder();
while ((hasRead = inStream.read(buffer)) != -1) {
sb.append(new String(buffer, 0, hasRead));
}

inStream.close();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}


                     也可以将其封装成工具类,提高代码可读性:

/**
*文件工具类
* @author 蔡睿智
*
*/
public class FileUtils {
/**
* 保存文件内容
*
* @param c
* @param fileName
*            文件名称
* @param content
*            内容
*/
public static void writeFiles(Context context,String fileName,String content,int mode) throws Exception{
// 打开文件获取输出流,文件不存在则自动创建
FileOutputStream fos = context.openFileOutput(fileName, mode);
fos.write(content.getBytes());
fos.close();
}

/**
* 读取文件内容
*
* @param c
* @param fileName
*            文件名称
* @return 返回文件内容
*/
public static String readFiles(Context c, String fileName) throws Exception {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
FileInputStream fis=c.openFileInput(fileName);
byte[] buffer=new byte[1024];
int len=0;
while((len=fis.read(buffer))!=-1){
baos.write(buffer,0,len);
}
String content=baos.toString();
fis.close();
baos.close();
return content;
}
}


                   以上就是Android文件存储的大致内容,写的不好如有更好的建议欢迎交流。共勉;

                             

                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐