5种数据存储方式之文件和Preferences

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

l 文件


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);


/**
 * @author  
 * @文件操作类:新建文件、删除、读写
 * */
package com.gogler.gps.infor;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import android.content.Context;
import android.os.Environment;

public class FileHelper
{
    
    private final Context context;
    
    /** SD卡是否存在 **/
    
    private boolean       hasSD = false;
    
    /** SD卡的路径 **/
    
    private final String  SDPATH;
    
    /** 当前程序包的路径 **/
    
    private final String  FILESPATH;
    
    /**
     * 从调用者传入
     * @param Context like this.getApplicationContext()
     * 
     * 
     * */
    public FileHelper ( Context context )
    {
    
	this.context = context;
	
	hasSD = Environment.getExternalStorageState().equals(
	
	android.os.Environment.MEDIA_MOUNTED);
	
	SDPATH = Environment.getExternalStorageDirectory().getPath();
	
	FILESPATH = this.context.getFilesDir().getPath();
	
    }
    
    /**
     * 
     * 在SD卡上创建文件
     * 
     * 
     * 
     * @throws IOException
     */
    
    public File createSDFile(String fileName) throws IOException
    {
    
	final File file = new File(SDPATH + "//" + fileName);
	
	if (!file.exists())
	{
	    
	    file.createNewFile();
	    
	}
	
	return file;
	
    }
    
    /**
     * 
     * 删除SD卡上的文件 
     * 
     * 
     * @param fileName
     */
    
    public boolean deleteSDFile(String fileName)
    {
    
	final File file = new File(SDPATH + "//" + fileName);
	
	if ((file == null) || !file.exists() || file.isDirectory())
	{
	    return false;
	}
	
	return file.delete();
	
    }
    
    public String getFILESPATH()
    {
    
	return FILESPATH;
	
    }
    
    public String getSDPATH()
    {
    
	return SDPATH;
	
    }
    
    public boolean hasSD()
    {
    
	return hasSD;
	
    }
    
    /**
     * 
     * 读取SD卡中文本文件
     * 
     * 
     * 
     * @param fileName
     * 
     * @return String
     */
    
    public String readSDFile(String fileName)
    {
    
	final StringBuffer sb = new StringBuffer();
	
	final File file = new File(SDPATH + "//" + fileName);
	
	try
	{
	    
	    final FileInputStream fis = new FileInputStream(file);
	    
	    int c;
	    
	    while ((c = fis.read()) != -1)
	    {
		
		sb.append((char) c);
		
	    }
	    
	    fis.close();
	    
	}
	catch (final FileNotFoundException e)
	{
	    
	    e.printStackTrace();
	    
	}
	catch (final IOException e)
	{
	    
	    e.printStackTrace();
	    
	}
	
	return sb.toString();
	
    }
    
    /**
     * 
     * 
     * 写SD卡上的文件
     * 
     * 
     * @param String
     *            fileName,String content
     * 
     * 
     * @return boolean
     * 
     * 
     * @author Administrator
     */
    
    public boolean writeFileData(String fileName, String content)
    {
    
	try
	{
	    final FileOutputStream fout = new FileOutputStream(SDPATH + "//"
		    + fileName, true);
	    final PrintStream ps = new PrintStream(fout);
	    ps.println(content);
	    ps.close();
	}
	catch (final IOException e)
	{
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	return true;
    }
    
}


l SharedPreferences
创建可跨程序使用的Preferrence


package com.gogler.SharePreferences;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Resources;
import android.os.Bundle;

public class SharePreferencesTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//        使用可跨程序读写的Preference
        SharedPreferences sp = getSharedPreferences("hello", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
        Editor editor = sp.edit();
        String str = "SharePreferencesTestActivity: "+getResources().getString(R.string.hello);
        editor.putString("helloStr", str );
        editor.commit();
    }
}



读取其他APP的Preference

package sharePreferences.gogler.com;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.TextView;

public class UseSharePreferencesTestActivity extends Activity {
    
	final String packageName = "com.gogler.SharePreferences";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//        访问其他APP的Preference
        try {
			Context otherAppContext = createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
			SharedPreferences sp = otherAppContext.getSharedPreferences("hello", Context.MODE_WORLD_READABLE);
			 TextView tv=(TextView)findViewById(R.id.tv);
			 tv.setText(sp.getString("helloStr", ""));
		} catch (NameNotFoundException e) { 
			e.printStackTrace();
		}
    }
}




相关文章
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
数据可视化 Java API
【Eclipse设计】Excel表格的读写功能
【Eclipse设计】Excel表格的读写功能
183 0
|
Windows
ArcGIS:如何连接文件夹、修改元数据样式、建立个人地理数据库、复制移动文件?
ArcGIS:如何连接文件夹、修改元数据样式、建立个人地理数据库、复制移动文件?
378 0
QT应用编程: 保存指定控件的数据到剪切板和本地文件
QT应用编程: 保存指定控件的数据到剪切板和本地文件
267 0
|
存储
艾伟_转载:使用配置文件(.settings、.config)存储应用程序配置
引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置。这样每次都要建立单独的配置类,并书写读写配置代码,相当麻烦。
815 0
|
存储 XML 数据格式
Confluence 6 从一个 XML 备份中导入一个空间
有下面 2 中方法可以导入一个空间——通过上传一个文件,或者从你 Confluence 服务器上的一个目录中导入。上传文件仅仅是针对一个小站点的情况。
1543 0