Android 本地存储
来源:互联网 发布:越南人 知乎 编辑:程序博客网 时间:2024/06/05 06:07
不要sd卡 不要数据库 也可以把.txt文件 放在android app的某个地方
Android app的"/data/com.example.demo/xxx.txt"这个文件夹下就可以存放我们想放的文件,并且也可以和其他app共享数据。
1.下面我们来看看怎么写入数据
/**
* 本地文件存储
* @param key自定义文件名
* @param value是要保存的字符串
*/
public static void save(Context context,String key , String value)
{
//创建输出流
FileOutputStream outStream = null;
try {
//Context.MODE_WORLD_READABLE(这个模式权限是可以让外部应用读取这个数据)
outStream = context.openFileOutput(key+".txt", Context.MODE_WORLD_READABLE );
outStream.write(value.getBytes());
} catch (FileNotFoundException e) {
return;
}
catch (IOException e){
return ;
}finally {
//关闭流
if( outStream != null)
{
try {
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行完之后,在如下位置,找到自己的包名,打开files文件夹 里面就有刚才保存的key.txt文件,数据就在这里面了。
2.保存完之后,来看看如何提取出来使用(应用内读取)
/**
* 本地文件读取
* @param key已保存的文件名
*/
public static String read(Context context,String key)
{
FileInputStream inStream = null;
ByteArrayOutputStream stream = null;
try {
inStream = context.openFileInput(key+".txt");
stream = new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
return stream.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
catch (IOException e){
return null;
}
finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (inStream != null) {
try {
inStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.在其它应用读取这个文件
public String read(String packageName,String key)
{
FileInputStream inStream = null;
ByteArrayOutputStream stream = null;
try {
Context c = createPackageContext(packageName, Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
inStream = c.openFileInput(key+".txt");
stream = new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
Log.e("TAG", "AboutSoftActivity =="+stream.toString());
return stream.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
catch (IOException e){
return null;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (inStream != null) {
try {
inStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
大致上和本地读取是没区别的,但是参数那里,可以看到第一个参数不是Context ,而是包名(被读取数据所在应用的包名),这个包名是为了在获取数据的应用里创建Context的( Context c = createPackageContext(packageName, Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);)
这样的话,就可以在一个程序中读取另一个程序存储的数据了。SP存储和这个也是一样的原理
- android 本地存储数据
- android 本地存储
- android 本地存储
- Android本地数据存储
- Android本地存储
- Android 本地存储
- Android本地存储总结
- android存储本地数据大全
- Android 本地数据存储 API
- Android中的本地存储路径
- Android本地存储方案 SharedPreferences
- Android 本地数据存储 API
- Android本地数据存储: Reservoir
- Android本地数据存储: ASimpleCache
- Android本地存储目录研究
- Android数据本地安全存储
- 理解 Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- Spring Boot集成Redis
- 计划任务crond
- 容易出错的“布尔值”判断
- Fragment异常:android.view.InflateException: Binary XML file line #35: Error inflating class fragment
- Android服务器——TomCat服务器的搭建
- Android 本地存储
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛—C
- android自定义的抽屉
- JavaWeb
- RabbitMQ 官方NET教程(五)【Topic】
- XML文档解析---SAX和StAX解析技术
- 修改 React-Native Android App 包名
- Android – Drawing multiline text on canvas If you always wanted to know how to draw multiline text
- java后台如何将rgb与16进制颜色进行转换