1、Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。

package com.example.service;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream; import android.content.Context; public class FileService {
/**
* 上下文对象
*/
private Context context; public FileService(Context context) {
super();
this.context = context;
} /**
* 保存文件
* @param filename 文件名称
* @param content 文件内容
* @throws Exception
*/
public void save(String filename,String content) throws Exception{
//私有操作模式:创建出来的文件只能被本应用访问,其他应用无法访问,另外采用私有模式创建的文件,写入的内容会覆盖原内容。
//私有操作特点:1、其他应用无法访问;2、内容会覆盖原内容。
FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
} /**
* 读取文件内容
* @param filename 文件名称
* @return
* @throws Exception
*/
public String read(String filename) throws Exception{
FileInputStream fis=context.openFileInput(filename);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
//把读取的数据写入到内存中
outputStream.write(buf,0,len);
}
outputStream.close();
fis.close();
byte[] data = outputStream.toByteArray();
return new String(data);
}
}

  2、查看文件和四种操作模式:

    openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存  在/data/data/<package name>/files目录,如: /data/data/com.example.service/files/1.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 ,只有这样其他程序才能正确访问。

  3、读取文件:

    如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法或者直接使用文件的绝对路径:

  File file = new File("/data/data/com.example.service/files/itcast.txt");

  FileInputStream inStream = new FileInputStream(file);

  Log.i("FileTest", readInStream(inStream));

  //注意:上面文件路径中的“com.example.service”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。

  4、获取目录

    Activity还提供了getCacheDir()和getFilesDir()方法:

    getCacheDir()方法用于获取/data/data/<package name>/cache目录

    getFilesDir()方法用于获取/data/data/<package name>/files目录

  5、Activity类读取文件代码:

package com.example.fileoperator;

import com.example.service.FileService;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { private EditText filename;
private EditText filecontent;
private Button btnSave;
private Button btnRead;
private TextView tvContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
filename = (EditText) this.findViewById(R.id.filename);
filecontent = (EditText) this.findViewById(R.id.filecontent);
tvContent=(TextView)this.findViewById(R.id.readFileContent);
tvContent.setText("");
btnSave = (Button) this.findViewById(R.id.btnSave); //保存文件
btnSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String nameString = filename.getText().toString();
String contentString=filecontent.getText().toString();
FileService fs = new FileService(MainActivity.this);
try {
fs.save(nameString, contentString);
Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, R.string.fail, Toast.LENGTH_LONG).show();
}
}
});
//读取文件内容
btnRead = (Button) this.findViewById(R.id.btnRead);
btnRead.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String nameString = filename.getText().toString();
FileService fs = new FileService(MainActivity.this);
try {
String content =fs.read(nameString);
tvContent.setText(content);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this,"读取失败", Toast.LENGTH_LONG).show();
}
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

Android学习笔记_5_文件操作的更多相关文章

  1. node 学习笔记 - fs 文件操作

    本文同步自我的个人博客:http://www.52cik.com/2015/12/03/learn-node-fs.html 最近看到群里不少大神都开始玩 node 了,我感觉跟他们步伐越来越大了, ...

  2. node学习笔记3——文件操作fs

    文件操作关键字: http('fs') ——  请求 node 里面的 http 模块 readFile ——  读文件,参数包括 文件名,回调函数 writeFile ——  写文件,参数包括 文件 ...

  3. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  4. Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...

  5. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  6. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  7. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  8. 【java学习笔记】文件操作

    文件操作 java.io.File ①创建删除文件及目录 ②查看文件及目录属性 ③文件过滤器 (PS:不包括文件读写数据) 1.单个文件 创建单个文件,查看属性,删除单个文件. package tmp ...

  9. python的学习笔记01_5文件操作

    一,文件操作基本流程. 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...

随机推荐

  1. TOJ 4119 Split Equally

    描述 Two companies cooperatively develop a project, but they don’t like working with one another. In o ...

  2. 【STM32学习笔记】STM32f407 使用4*4矩阵键盘

    作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 欢迎转载,但也请保留上面这段声明.谢谢! 写在前面: 这是本人第一次开始写博客,可能写的不是很好,也请大家谅 ...

  3. 测试UTC时间可以用的网址

    需要FQ的网址 https://time.artjoey.com/cn/ 不需要FQ的网址 https://time.is/ http://time.123cha.com/?q=Minsk

  4. 一个不错的架构图:基于SpringCloud的微服务项目

    https://github.com/hanlin5566/HJ-MicroService

  5. 很有用的PHP笔试题系列一

    1.抓取远程图片到本地,你会用什么函数? fsockopen, A 3.用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21 Echo date(‘Y-m-d H:i:s’,st ...

  6. [转]ASP.NET Core Exception Filters and Resource Filters

    本文转自:https://damienbod.com/2015/09/30/asp-net-5-exception-filters-and-resource-filters/ This article ...

  7. Linux进程优先级和nice值

    在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹 这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识 我们可以通过ps -l看到当前正在运行的进程的详细信息其中 F:表示进程 ...

  8. 网易回合制游戏录像批量下载(失效 不是因为代码 是因为网易官方关闭了录像网站 :P)

    最近在访问网易大话西游2的录像专区时,发现页面还是很早之前的板式,网易的编辑并没有打算重新美化的打算,不由得内心一寒,结合之前好几个回合制游戏的倒闭,让很多人回顾都没办法回顾, 而且,很多人现在也没有 ...

  9. 菜鸟学习Spring——SpringMVC注解版在服务器端获取Json字符串并解析

    一.概述. SpringMVC在服务端把客户端传过来的JSON字符串,并把JSON字符串转成 JSON对象并取得其中的属性值,这个在项目中经常用到. 二.代码演示. 需要添加的jar包. 2.1 we ...

  10. bit byte 字 字节 关系 简列

    字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte = 16bit) 1字节=8比特(1 byte = 8bit) 1比特=1位 一个字的字长为1 ...