现在的位置: 首页 > 综合 > 正文

Android openFileOutput 和 openFileInput

2018年02月13日 ⁄ 综合 ⁄ 共 11106字 ⁄ 字号 评论关闭

转自:http://www.cnblogs.com/elleniou/archive/2012/05/17/2505630.html

首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。

public void save()
    {
        try {
            FileOutputStream outStream=this.openFileOutput(“a.txt”,Context.MODE_WORLD_READABLE);
            outStream.write(text.getText().toString().getBytes());
            outStream.close();
            Toast.makeText(MyActivity.this,”Saved”,Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            return;
        }
        catch (IOException e){
            return ;
        }
    }

 

openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android
会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/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:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
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 ,只有这样其他程序才能正确访问。
读取文件内容

 

public void load()
{
    try {
        FileInputStream inStream=this.openFileInput(“a.txt”);
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        byte[] buffer=new byte[1024];
        int length=-1;
        while((length=inStream.read(buffer))!=-1)   {
            stream.write(buffer,0,length);
        }
        stream.close();
        inStream.close();
        text.setText(stream.toString());
        Toast.makeText(MyActivity.this,”Loaded”,Toast.LENGTH_LONG).show();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e){
        return ;
    }
}

 

对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。
Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录

  

把文件放入SD卡

 

使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移动硬盘或U盘。

在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:

在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:

mksdcard 2048M D:\AndroidTool\sdcard.img

在程序中访问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”/>

 

要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。

注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

         File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录

         File saveFile = new File(sdCardDir, “a.txt”);

       FileOutputStream outStream = new FileOutputStream(saveFile);

         outStream.write(“test”.getBytes());

         outStream.close();

}

Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。

Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:

File sdCardDir = new File(“/sdcard”); //获取SDCard目录

File saveFile = new File(sdCardDir, “itcast.txt”); 

//上面两句代码可以合成一句: File saveFile = new File(“/sdcard/a.txt”);

FileOutputStream outStream = new FileOutputStream(saveFile);

outStream.write(“test”.getBytes());

outStream.close();

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/elleniou/category/375361.html

Android
android回调函数总结

摘要: 回调函数就是那些自己写的,但是不是自己来调,而是给别人来掉的函数。消息响应函数就可以看成是回调函数,因为是让系统在合适的时候去调用。这不过消息响应函数就是为了处理消息的,所以就拿出来单做一类了。其实本质上就是回调函数。但是回调函数不是只有消息响应函数一种,比如在内核编程中,驱动程序就要提供一些回调函数,当一个设备的数据读写完成后,让系统调用这些回调函数来执行一些后续工作。回调函数赋予程序员这样一种能力,让自己编写的代码能够跳出正常的程序控制流,适应具体的运行环境在正确的时间执行。回调函数总结别人给回调的定义:所谓回调,就是对象A调用另一对象B中的某个方法b,然后B又在某个时候反过来调用A中的某阅读全文
posted @ 2012-05-21 02:07 elleniou 阅读(107) | 评论
(0)
 编辑
eclipse导入工程中文乱码问题

摘要: eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的。一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同,就会产生中文的乱码问题,这其中还有几种情况。如果导入的整个工程的编码方式与eclipse的编码方式有冲突,那么这个工程里所有的中文 都是乱码;如果所有工程的编码方式与eclipse工作空间的编码方式有冲突,那么所有的工程里的中文都有可能是乱码。对于eclipse工作空间
,eclipse会把你改的设置保存在工作空间的设置文件中,对于单个工程的编码方式进行修改,那么eclipse会把编码方式保存在阅读全文
posted @ 2012-05-20 09:21 elleniou 阅读(25) | 评论
(0)
 编辑
你真的会用Android的Dialog吗?由一个Exception想到的

摘要: 一个Bug前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:java.lang.IllegalArgumentException: View not attached to window manager at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356) at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201)
at android.view.Window$LocalWin阅读全文
posted @ 2012-05-20 09:17 elleniou 阅读(34) | 评论
(0)
 编辑
openFileOutput()

摘要: 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。public void save() { try { FileOutputStream outStream=this.openFileOutput(“a.txt”,Context.MODE_WORLD_READABLE); outStream.write(text.getText().toString().getBytes());
outStream.close(); Toast.makeText(MyActi阅读全文
posted @ 2012-05-17 01:14 elleniou 阅读(399) | 评论
(0)
 编辑
Android Application 对象介绍

摘要: What is Application Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标签中进行注册(只需要给Application标签增加个name属性把自己的
Application的名字定入即可)。 android系统会为每个程序运行时..阅读全文
posted @ 2012-05-16 00:24 elleniou 阅读(216) | 评论
(0)
 编辑
SoftReference 介绍

摘要: 1 Java中的SoftReference 2 即对象的软引用。如果一个对象具有软引用,内存空间足够,垃 圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高 速缓存。使用软引用能防止内存泄露,增强程序的健壮性。 3 SoftReference的特点是它的一个实例保存对一个Java对象的软引用, 该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对
这个Java对象回收前,SoftReference类所提...阅读全文
posted @ 2012-05-15 23:04 elleniou 阅读(11) | 评论
(0)
 编辑
Android 图片平铺实现方式

摘要: 1 我们大家都看过平铺的效果,那么我们都是怎么样才能实现的那,我们其实主要用到的就是api,我们一开始new一个bitmap,就可以了,但是,大家都没有想过,我们还可以用什么方法来做这个事情那,那么我们就来说说第二种方法,那就在用到了xml,上面我们说了两个方法,但android是非常强大的,也就是说我们还有第三个方法,那就是我们自己画出来,那么我们就来看看代码吧: 2 3 1)第一种利用系统提供的api实现 4 5 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.pic); 6...阅读全文
posted @ 2012-05-10 16:00 elleniou 阅读(247) | 评论
(0)
 编辑
android 各种进度条(ProgressBar)

摘要: 当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行、执行进度如何、应用程序是否遇到错误终止等,这时需要使用进度条来提示用户后台程序执行的进度。Android系统提供了两大类进度条样式,长形进度条(progress-BarStyleHorizontal)和圆形进度条(progressBarStyleLarge)。进度条用处很多,比如,应用程序装载资源和网络连接时,可以提示用户稍等,这一类进度条只是代表应用程序中某一部分的执行情况,而整个应用程序执行情况呢,则可以通过应用程序标题栏来显示一个进度条,这就需要先对窗口的显示风格进行设置"requestWind阅读全文
posted @ 2012-05-07 22:47 elleniou 阅读(90) | 评论
(0)
 编辑
八款开源 Android 游戏引擎

摘要: 初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游 戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情。事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存在。仅仅因为我们处于这个狭小的天地间,与外界接触不够,所以对它们的存在茫然不知罢了。下面我就罗列出八款阅读全文
posted @ 2012-05-07 01:03 elleniou 阅读(21) | 评论
(0)
 编辑
绘图工具备忘

摘要: 应用类型:教学辅助,学习助手待解决问题:如何将手机屏幕显示在电脑屏幕上(豌豆夹)功能1.机械操作2.随意图画3.智能辨别4.计算模式(数字、运算符辨别,运用编译原理语法分析的知识)5.附加功能(1)图形智能辨别(2)图形缩放(3)旋转(4)移动(5)保存(操作名)(6)图形延伸(7)删除(8)颜色选择(9)画笔大小(10)3D转换目前解决方案:1.利用分类求解方法,将特殊图形以及没有特定方程的图形进行细小划分2.方差求解,对于曲线方程可以通过模拟出其表达式(最合适的一次表示、二次表达式、三次表达式。。。),然后将点带入进行方差对比,最小者为最佳选择。3.分类可以分为闭合图形和不闭合图形。是否闭阅读全文
posted @ 2012-05-06 22:12 elleniou 阅读(6) | 评论
(0)
 编辑
Android访问权限大全

摘要: android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded)android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows
an application to access 阅读全文
posted @ 2012-05-04 00:51 elleniou 阅读(16) | 评论
(0)
 编辑
Android程序完全退出的三种方法

摘要: Android程序完全退出的三种方法作者: Android开发网原创 时间: 2010-06-10 很多网友可能发现自己的Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里Android123给大家三种比较简单的方法实现。 首先要说明在B中直接使用finish(),接下来手机显示的还是主窗口A,所以一起来看看Android开发网是如何实现的吧. 1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()...阅读全文
posted @ 2012-05-04 00:43 elleniou 阅读(46) | 评论
(0)
 编辑
android布局属性

摘要: 1 android布局属性 2 布局: 3 AbsoluteLayout(绝对布局): 4 xmlns:android="http://scmemas.android.com/apk/res/android" 5 style="@..." 6 android:clipChildren="true|false" 7 android:clipToPadding="true|false" 8 android:layoutAnimation="@---" 9 android:animationCache阅读全文
posted @ 2012-05-04 00:39 elleniou 阅读(80) | 评论
(0)
 编辑
Android SQLite 数据库详细介绍

摘要: Android SQLite 数据库详细介绍我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须阅读全文
posted @ 2012-05-04 00:36 elleniou 阅读(144) | 评论
(0)
 编辑
为Android应用程序添加社会化分享功能

摘要: 正在做个android的小应用,有点想尝试一下社会化分享,比如分享到新浪微博啥的。看一下新浪,人人网的API,说实话功能很全很强大,但虽说有相对的SDK,但是总觉得不方便。因为正在使用友盟的统计SDK,无意间发还有个SNS的SDK,看了一下文档,感觉不错哈。总共需要3个包,Umeng-Android-SDK-SnsService.jar,httpmime-4.1.1.jar和commons-httpclient-3.1.jar。大小分别为63K,27K,298K。感觉有点点大,但是比较一下新浪,人人,腾讯微薄提供的API,其实大小没差好多,等下我们还可以压缩一下的嘛。新建一个文件夹libs,将阅读全文
posted @ 2012-04-30 01:21 elleniou 阅读(33) | 评论
(0)
 编辑
Android将图像转换成流存储与将流转换成图像

摘要: 1 //take the image to byte[] 2 byte[] byteIcon = userIcon; 3 4 //将字节数组即头像从二进制流转换成drawable 5 if(byteIcon != null){ 6 7 ByteArrayInputStream bais = new ByteArrayInputStream(byteIcon); 8 ...阅读全文
posted @ 2012-04-28 11:12 elleniou 阅读(203) | 评论
(0)
 编辑
Android 在代码中获取手机屏幕的宽高

摘要: 1 DisplayMetrics dm = new DisplayMetrics();2 //获取屏幕信息3 getWindowManager().getDefaultDisplay().getMetrics(dm);4 5 int screenWidth = dm.widthPixels;6 7 int screenHeigh = dm.heightPixels;阅读全文
posted @ 2012-04-28 02:09 elleniou 阅读(15) | 评论
(0)
 编辑
如何改变Android tab 的高度和字体大小

摘要: 1 int count = tabWidget.getChildCount();//TabHost中有一个getTabWidget()的方法 2 for (int i = 0; i < count; i++) { 3 View view = tabWidget.getChildTabViewAt(i); 4 view.getLayoutParams().height = 80; //tabWidget.getChildAt(i) 5 final TextView
tv = (TextView) view.findViewById(android.R.id.titl...阅读全文
posted @ 2012-04-28 02:04 elleniou 阅读(409) | 评论
(0)
 编辑
MATCH_PARENT是什么类型的布局

摘要: 有网友表示对于很多工程中的MATCH_PARENT出现在layout中感到不明白,过去只有FILL_PARENT和WRAP_CONTENT那么match_parent到底是什么类型呢? 其实从Android 2.2开始FILL_PARENT改名为MATCH_PARENT ,从API Level为8开始我们可以直接用MATCH_PARENT来代替FILL_PARENT,最后Android123提醒大家,他们的定义本质是一样均为-1,只是换了个别名,可能为了更准确些,比如最终在SDK中的定义为:fill_parent
-1 The view should be as big as its par.阅读全文
posted @ 2012-04-28 00:04 elleniou 阅读(9) | 评论
(0)
 编辑
android中所有颜色代码

摘要: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <resources> 3 <color name="white">#ffffff</color><!--白色 --> 4 <color name="ivory">#fffff0</color><!--象牙色 --> 5 <color name="lightyellow">#ffffe0</col阅读全文
posted @ 2012-04-25 13:41 elleniou 阅读(470) | 评论
(0)
 编辑

抱歉!评论已关闭.