Android学习笔记十三.Android数据存储与IO.File存储常用API
Android通过一套完整的I/O流体系,包括FileInputStream、FileOutputStream等,通过这些I/O流来访问手机存储上的文件。一、API1.File(1)功能:该类提供一些有限的功能-获取或设置文件的权限、文件类型、最后依次修改时间等,通常它所代表的文件名(包含路径)将被转换为UTF-8字节序列被使用。(2)继承关系 java.lang.Objec
·
Android通过一套完整的I/O流体系,包括FileInputStream、FileOutputStream等,通过这些I/O流来访问手机存储上的文件。
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)
一、API
1.File
(1)功能:该类提供一些有限的功能-获取或设置文件的权限、文件类型、最后依次修改时间等,通常它所代表的文件名(包含路径)将被转换为UTF-8字节序列被使用。
(2)继承关系
java.lang.Object
↳ java.io.File
(3)构造方法
File(File dir, String name):构造一个新文件对象,且文件对象包含指定的路径和文件名
|
boolean createNewFile():根据存储在文件对象中的路径信息,在此路径下新建一个空的新文件
boolean delete():删除该文件
String getAbsolutePath():返回该文件的绝对路径,且为字符串形式
String getCanonicalPath():返回表示与此抽象路径名相同的文件或目录的规范路径名字符串
String getPath():返回相对路径名,且为字符串形式
long lastModified() :返回该文件被最后修改的时间,这里需要注意的是返回的是从1970.1.1.00.00 到当前的毫秒量
File[] listFiles() :返回该文件所在目录的所有文件到一个File数组
String toString() :返回一些关于该文件简洁可读的相关信息
URI toURI() :返回该文件的统一资源标志符
setXXX..:设置文件对象对应文件的属性
2.FileInputStream
(1)功能:一个输入流,用于从文件读出字节数据。该输入流不是缓冲空间,大部分方法调用需要用BufferedInputStream类来包装该流。我们还可以通过 FileRead类向文件写入字符数据。
File file = ...
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
...
finally {
if (in != null) {
in.close();
}
}
}
(2)继承关系
java.lang.Object
↳ java.io.InputStream
↳ java.io.FileInputStream
(3)构造方法
FileInputStream(File file)
Constructs a new FileInputStream that reads from file.
|
Constructs a new
FileInputStream
that reads from
fd .
|
Equivalent to
new FileInputStream(new File(path)) .
|
Public int available() :返回文件还有多少可读或跳过的数据字节数
Public void close() :关闭输入流
Public int read() :从输入流中读取出一个字节数据,并将其转换为整型数据(0-255)返回
Public int read(byte[] buffer, int byteOffset, int byteCount) :从输入流读取byteCount个字节数据到buffer数组中,从byteOffset位置开始存储。
Public long skip(long byteCount) :
Skips at most byteCount bytes in this stream.
Protected void finalize() :确定该输入流所有资源释放被是否并准备被垃圾回收器回收
(1)功能:文件输出流,用于写入字节数据到文件中。如果该输出流存在,则替换或者追加文件中的内容;如果文件输出流不存在,则创建一个新文件。注意:该输出流不是缓冲空间,大部分方法调用需要用BufferedOutputStream类来包装该流。我们还可以通过 FileWriter类向文件写入字符数据。
File file = ...
OutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream(file));
...
finally {
if (out != null) {
out.close();
}
}
}
(2)继承关系
java.lang.Object
↳ java.io.OutputStream
↳ java.io.FileOutputStream
(3)构造方法
FileOutputStream(File file) :构造一个 FileOutputStream 实例,用于写字节数据到File对象对应的文件
|
void close() :关闭输出流
void write(byte[] buffer, int byteOffset, int byteCount) :从数组的Offset位置开始写Count个字节到该输出流
void write(int oneByte) :写一个字节到该输出流
(1)Context提供了两个方法来打开本应用程序的数据文件夹的文件I/O流(输入流、输出流)
FileInputStream openFileInput(String):打开应用程序的数据文件夹下的name文件对应输入流;
FileOutputStream openFileOutput(String name,int mode):打开应用程序的数据文件夹下的name文件对应输出流;
其中,第二个参数值如下:
MODE_PRIVATE:该文件只能被当前程序读写;
MODE_APPEND:以追加方式打开文件,应用程序可以想该文件中追加内容;
MODE_WORLD_READABLE:该文件的内容可以被其他程序读取;
MODE_WORLD_WRITEABLE:该文件的内容可被其他程序读、写
(2)Context提供几种方法用于访问应用程序的数据文件夹
getDir(String name,int mdoe):在应用程序的数据文件夹下获取或创建name对应的子目录
File getFilesDir():获取该应用程序的数据文件夹的绝对路径
String[] fileList():返回该应用程序的数据文件夹下的全部文件
deleteFile(String):删除该应用程序的数据文件夹下的指定文件
二、实例分析
1.实现:读写应用程序数据文件夹内的文件
2.文件读取开发思路
(1)从输入流读取数据:a.打开一个文件输入流;b.创建一个数组缓冲空间;c.从输入流循环读取buffer.length个字节数据到缓冲空间并最后存放到StringBuilder中。
FileInputStream fis=openFileInput("test.txt");
byte[] buff=new byte[1024];
int hasRead=0;
StringBuilder sb=new StringBuilder("");
while( (hasRead=fis.read(buff)) >0 )
//
将文件数据读到buff数组中并返回字节数,等价于 read(buffer, 0, buffer.length)
{
sb.append(new String(buff,0,hasRead));//从buff缓冲中读取从0位置开始hasRead个字节数的内容存放到StringBuilder对象中
}
fis.close();
return sb.toString(); //返回读取到的数据
(2)写数据到文件输出流:a.以追加模式打开一个文件输出流;b.将输出流打包成
PrintStream;c.向PrintStream追加写入传入的数据
FileOutputStream fos=openFileOutput(FILE_NAME,MODE_APPEND);
PrintStream ps=new PrintStream(fos);
ps.append(content);
ps.close();
3.源码:
package com.example.android_sdcard_0;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class FileTest extends Activity {
final String FILE_NAME="test.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//0.获取界面组件
Button write=(Button)findViewById(R.id.writeBtn);
Button read=(Button)findViewById(R.id.readBtn);
final EditText edit1=(EditText)findViewById(R.id.edit1);
final EditText edit2=(EditText)findViewById(R.id.edit2);
//1.为按钮设置监听器并实现相应功能(写、读)
write.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
write(edit2.getText().toString()); //获取文本编辑框中的数据并写入到文件中
edit2.setText(""); //清空文本编辑框
}
});
read.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
edit1.setText(read()); //读取指定文件中的内容并显示出来
}
});
}
//2.实现read()方法:从指定文件中读取数据
private String read(){
try {
FileInputStream fis=openFileInput(FILE_NAME);//a.打开文件输入流
byte[] buff=new byte[1024]; //b.开辟一段缓冲空间
int hasRead=0; //c.读取位置标志位
StringBuilder sb=new StringBuilder(""); //d.实例化一个StringBuilder对象
while( (hasRead=fis.read(buff)) >0 ) //将文件数据读到buff数组中并返回字节数,等价于 read(buffer, 0, buffer.length).
{
sb.append(new String(buff,0,hasRead)); //从buff缓冲中读取从0位置开始hasRead个字节数的内容存放到StringBuilder对象中
}
fis.close();
return sb.toString(); //返回读取到的数据
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
//3.将文本编辑框中的数据追加写入到指定文件中
private void write(String content) {
try {
FileOutputStream fos=openFileOutput(FILE_NAME,MODE_APPEND); //以追加模式打开指定文件(输出流)
PrintStream ps=new PrintStream(fos); //将FileOutputStream包装成PrintStream
ps.append(content); //将传递进来的数据参数写入指定文件中
ps.close(); //关闭文件
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
效果演示:/data/data/<包名>/files/test.txt
更多推荐
已为社区贡献2条内容
所有评论(0)