Android学习笔记(11)————Android的私人文件夹的文件读写操作 .
2015-04-14 09:30
579 查看
/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/
Android数据存储
Android的文件数据存储方式有几种方式,如Shared Preferences、Network、SQlite、File……
而File存储又可以以存放的位置分为,存放于应用程序的私有文件夹和SDcard目录里面。
今天就简单说说Android应用程序对私有文件夹的读写操作。
私有文件的存储
一个应用程序的私有文件夹位于/data/data/"应用程序的包名"/files文件夹下面。打开eclipse的DDMS可以通过查看File Explorer找到文件。
![](http://hi.csdn.net/attachment/201202/26/0_1330256803OtyP.gif)
创建之后用户具有读写的权限,默认情况下,该文件是不能被其他应用程序访问的,但是可以更改权限。应用程序安装之后,可在Android“设置”选项里面清除该应用程序的数据。通过openFileOutput(String filename,mode)和openFileInput(String filename) 可以得到一个文件流(FileOutputStream)或者(FileIutputStream), 然后调用文件流的write方法或者read方法就可以实现“写”和“读”功能 。
写操作
openFileOutput(String filename,mode)———— 打开应用程序私有目录下的的指定私有文件(String filename)写入数据,
返回一个FileOutputStream 对象,如果文件不存在就创建这个文件。
官方说明
Parameters
Returns
FileOutputStream Resulting output stream.
常量 含义
写文件的简单过程
调用openFileOutput(String filename,mode)方法之后,会返回一个FileOutputStream对象。
然后调用FileOutputStream对象的write方法就可以写入文件了。
FileOutputStream.write(byte[] buffer) 虽然注意的是,write()方法写入的是byte[]类型,所以要通过
[java]
view plaincopyprint?
byte[] buffer = args.getBytes();
其他操作方法:
读文件
openFileInput(String filename) 打开应用程序私有目录下的的指定私有文件以读入数据,返回一个FileInputStream 对象
列举文件
fileList() 搜索应用程序私有文件夹下的私有文件,返回所有文件名的String数组
删除文件
deleteFile(String fileName) 删除指定文件名的文件,成功返回true,失败返回false
具体用法还是看一下demo程序的代码,注释比较详细了
效果图
![](http://hi.csdn.net/attachment/201202/27/0_1330310668s5gu.gif)
[java]
view plaincopyprint?
/*author:conowen
* date:2012.2.27
*/
package com.conowen.privatefile;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class PrivatefileActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button writebt = (Button) findViewById(R.id.write);
Button readbt = (Button) findViewById(R.id.read);
Button delbt = (Button) findViewById(R.id.del);
writebt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText et = (EditText) findViewById(R.id.et);
String etres = et.getText().toString();
filewrite("test.data", etres);
String[] filelist=fileList();//找出私有文件夹里面的文件,返回文件名
Toast.makeText(PrivatefileActivity.this, "文件名是"+filelist[0],Toast.LENGTH_SHORT).show();
}
});
readbt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String result = "";
result = fileread("test.data");
Toast.makeText(PrivatefileActivity.this, result,
Toast.LENGTH_SHORT).show();
}
});
delbt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
delFile("test.data");
}
});
}
// 读
public String fileread(String filename) {
// 打开指定文件,读取其数据,返回字符串对象
String res = "";// 初始化res
try {
FileInputStream fileread = openFileInput(filename);
// 获取文件长度
int lenght = fileread.available();
byte[] buffer = new byte[lenght];
fileread.read(buffer);
// 将byte数组转换成指定编码格式的字符串
res = EncodingUtils.getString(buffer, "UTF-8");// 文件编码
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
// 删
public boolean delFile(String filename) {
try {
boolean del = deleteFile(filename);
return del;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void filewrite(String filename, String args) {
// 写
try {
byte[] buffer = args.getBytes();
// 将要写入的字符串转换为byte数组 ,args为方法传入的字符串
FileOutputStream out = openFileOutput(filename, MODE_APPEND);
// 获得FileOutputStream
out.write(buffer);// 将byte数组写入文件
Log.i("i", "write");
out.close();// 关闭文件输出流
} catch (Exception e) {
System.err.println("Error writing to file!");
}
}
}
main.xml代码
[html]
view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<EditText
android:id="@+id/et"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/write"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:text="写" />
<Button
android:id="@+id/read"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:text="读" />
<Button
android:id="@+id/del"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:text="删" />
</LinearLayout>
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/
Android数据存储
Android的文件数据存储方式有几种方式,如Shared Preferences、Network、SQlite、File……
而File存储又可以以存放的位置分为,存放于应用程序的私有文件夹和SDcard目录里面。
今天就简单说说Android应用程序对私有文件夹的读写操作。
私有文件的存储
一个应用程序的私有文件夹位于/data/data/"应用程序的包名"/files文件夹下面。打开eclipse的DDMS可以通过查看File Explorer找到文件。
![](http://hi.csdn.net/attachment/201202/26/0_1330256803OtyP.gif)
创建之后用户具有读写的权限,默认情况下,该文件是不能被其他应用程序访问的,但是可以更改权限。应用程序安装之后,可在Android“设置”选项里面清除该应用程序的数据。通过openFileOutput(String filename,mode)和openFileInput(String filename) 可以得到一个文件流(FileOutputStream)或者(FileIutputStream), 然后调用文件流的write方法或者read方法就可以实现“写”和“读”功能 。
写操作
openFileOutput(String filename,mode)———— 打开应用程序私有目录下的的指定私有文件(String filename)写入数据,
返回一个FileOutputStream 对象,如果文件不存在就创建这个文件。
官方说明
Parameters
name | The name of the file to open; can not contain path separators. |
---|---|
mode | Operating mode. Use 0 or MODE_PRIVATEfor the default operation, MODE_APPEND to append to an existing file, MODE_WORLD_READABLEand MODE_WORLD_WRITEABLE to control permissions. |
FileOutputStream Resulting output stream.
常量 含义
MODE_PRIVATE默认模式,值为0,文件只可以被调用该方法的应用程序访问
MODE_APPEND如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。(常用)
MODE_WORLD_READABLE所有的应用程序都具有对该文件读的权限。
MODE_WORLD_WRITEABLE所有的应用程序都具有对该文件写的权限。
写文件的简单过程
调用openFileOutput(String filename,mode)方法之后,会返回一个FileOutputStream对象。
然后调用FileOutputStream对象的write方法就可以写入文件了。
FileOutputStream.write(byte[] buffer) 虽然注意的是,write()方法写入的是byte[]类型,所以要通过
[java]
view plaincopyprint?
byte[] buffer = args.getBytes();
byte[] buffer = args.getBytes();转换,把为string类型的args转换为byte[]类型。然后再写入。
其他操作方法:
读文件
openFileInput(String filename) 打开应用程序私有目录下的的指定私有文件以读入数据,返回一个FileInputStream 对象
列举文件
fileList() 搜索应用程序私有文件夹下的私有文件,返回所有文件名的String数组
删除文件
deleteFile(String fileName) 删除指定文件名的文件,成功返回true,失败返回false
具体用法还是看一下demo程序的代码,注释比较详细了
效果图
![](http://hi.csdn.net/attachment/201202/27/0_1330310668s5gu.gif)
[java]
view plaincopyprint?
/*author:conowen
* date:2012.2.27
*/
package com.conowen.privatefile;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class PrivatefileActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button writebt = (Button) findViewById(R.id.write);
Button readbt = (Button) findViewById(R.id.read);
Button delbt = (Button) findViewById(R.id.del);
writebt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText et = (EditText) findViewById(R.id.et);
String etres = et.getText().toString();
filewrite("test.data", etres);
String[] filelist=fileList();//找出私有文件夹里面的文件,返回文件名
Toast.makeText(PrivatefileActivity.this, "文件名是"+filelist[0],Toast.LENGTH_SHORT).show();
}
});
readbt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String result = "";
result = fileread("test.data");
Toast.makeText(PrivatefileActivity.this, result,
Toast.LENGTH_SHORT).show();
}
});
delbt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
delFile("test.data");
}
});
}
// 读
public String fileread(String filename) {
// 打开指定文件,读取其数据,返回字符串对象
String res = "";// 初始化res
try {
FileInputStream fileread = openFileInput(filename);
// 获取文件长度
int lenght = fileread.available();
byte[] buffer = new byte[lenght];
fileread.read(buffer);
// 将byte数组转换成指定编码格式的字符串
res = EncodingUtils.getString(buffer, "UTF-8");// 文件编码
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
// 删
public boolean delFile(String filename) {
try {
boolean del = deleteFile(filename);
return del;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void filewrite(String filename, String args) {
// 写
try {
byte[] buffer = args.getBytes();
// 将要写入的字符串转换为byte数组 ,args为方法传入的字符串
FileOutputStream out = openFileOutput(filename, MODE_APPEND);
// 获得FileOutputStream
out.write(buffer);// 将byte数组写入文件
Log.i("i", "write");
out.close();// 关闭文件输出流
} catch (Exception e) {
System.err.println("Error writing to file!");
}
}
}
main.xml代码
[html]
view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<EditText
android:id="@+id/et"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/write"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:text="写" />
<Button
android:id="@+id/read"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:text="读" />
<Button
android:id="@+id/del"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:text="删" />
</LinearLayout>
相关文章推荐
- Android学习笔记(11)————Android的私人文件夹的文件读写操作
- Android学习笔记(4)————Android的私人文件夹的文件读写操作
- Android创建隐藏文件或者文件夹,并对其读写操作
- Android学习笔记(九) Android文件读写操作
- android创建隐藏文件或者文件夹,并对其读写操作
- Android创建隐藏文件或者文件夹,并对其读写操作
- Android创建隐藏文件或者文件夹,并对其读写操作android创建隐藏文件或者文件夹,其实只要在文件名或者文件夹名字前加一个点号即可。 隐藏文件(夹)可直接进行读写。 下面是一段隐藏文件的创建
- Android创建隐藏文件或者文件夹,并对其读写操作
- 对文件夹中所文件(csv)进行读写操作
- Java与Android的文件读写操作
- Android读写assets目录下面的资源文件(文件夹)
- Android SD卡简单的文件读写操作
- Android SD卡简单的文件读写操作
- Android 初始文件夹创建 以及 文件&文件夹相关操作
- python中文件读写及操作目录 文件夹等
- 对文件夹中所文件(csv)进行读写操作
- 对文件夹中所文件(csv)进行读写操作
- 对文件夹中所文件(csv)进行读写操作
- Android 文件读写以及assets操作
- android文件操作——读写文件demo