关于Android的文件操作。
PS:个人对于IO流的理解就是 一切都是基于本机JVM而言。输入和输出易混。
输入就是输入到本机JVM中,而输出则就是从本机JVM输出到其他地方存储。
而IO流分为两种, 一种是字节流。一种是字符流
字节流。InputStream ByteArrayOutputStream
字符流。Reader Buffered BufferedReader InputStreamReader
1.输出流(简单明了)
private void outFile(String info) {
// 系统默认的存储路径
try {
//打开本地的存储路径并创建一个输出流
FileOutputStream fileOutPut = openFileOutput("zhangstar.txt",
MODE_PRIVATE);
//这里外面用输出流输出一个字符串
//当然不能输出字符串,必须先转换为byte类型的数组
fileOutPut.write(info.getBytes());
//关闭输出流
fileOutPut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
openFileOutput是Android打开本机存储路径的一个方法。
也就是系统默认的存储路径 data/data/..
2.输入流(简单明了)
private String inFile() {
// 系统默认的存储路径
String info = "";
try {
//打开本地的存储路径并创建一个输入流
FileInputStream fileInPut = openFileInput("zhangstar.txt");
//实例一个byte数组
byte[] b = new byte[fileInPut.available()];
//将输入流去读取文件,读取文件转换为字节存入刚刚定义的byte数组
fileInPut.read(b);
//再通过转码的形式将byte[]b里面的内容转换为字符串
info = EncodingUtils.getString(b, "UTF-8");
//最后关闭输入流
fileInPut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return info;
}
上面两种是根据系统默认目录来输入输出的方式。
下面两种自定义路径的输入输出的方式。(以SD卡为例)
3.自定义路径输出流
private void customFilePathOutFile(String info) {
try {
/** 使用自定义路径时,则不能去用openFileOutput去实例了。
/** 必须new一个对象。
*/ Environment.getExternalStorageDirectory()表示当前SD卡的路径
FileOutputStream fileOutPut = new FileOutputStream(new File(
Environment.getExternalStorageDirectory(), "zhangstar.txt"));
fileOutPut.write(info.getBytes());
fileOutPut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.自定义路径输入流
private String customFilePathInFile() {
String info = "";
try {
FileInputStream fileInPut = new FileInputStream(new File(
Environment.getExternalStorageDirectory(), "zhangstar.txt"));
byte[] b = new byte[fileInPut.available()];
fileInPut.read(b);
info = EncodingUtils.getString(b, "UTF-8");
fileInPut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return info;
}
5.使用ByteArrayOutputStream输出流和FileInputStream输入流来解析数据
private String ByteAyyayInPutFile() {
String info = "";
try {
//
FileInputStream inputStream = new FileInputStream(new File(
Environment.getExternalStorageDirectory(), "zhangstar.txt"));
//确定当前输入流的长度(注意的是,一定要作为一个变量)
//不能直接写 byte[] b =new byte[inputStream.available()]
//否则得不到结果
int length=inputStream.available();
byte[] b = new byte[length];
//实例化一个ByteArrayOutputStream输出流
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
//用输入流去读文件到数组里
while (inputStream.read(b) != -1) {
//ByteArrayOutputStream可以当做为一个缓冲区。
//此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动
//增长。可使用 toByteArray() 和 toString() 获取数据。
arrayOutputStream.write(b, 0, length);
}
//然后将ByteArrayOutputStream转换为byte类型,最后转换为字符串
//
info = EncodingUtils.getString(arrayOutputStream.toByteArray(),
"UTF-8");
//后声明的流先关闭
arrayOutputStream.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return info;
}
6.使用BufferedReader去读取数据
private String BufferReaderInPutFile(){
//定义一个字符串缓冲区
StringBuffer info=new StringBuffer();
try {
//
FileInputStream fileInPut=openFileInput("zhangstar.txt");
//实例化一个BUfferedReader
//BufferedReader:从字符输入流中读取文本,缓冲各个字符,
//从而实现字符、数组和行的高效读取。
//可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
BufferedReader bd = new BufferedReader(new InputStreamReader(fileInPut));
String str ="";
//按行读取
while((str=bd.readLine())!=null){
//每读取一行字符同添加到StringBuffer里面
info.append(str);
}
} catch (Exception e) {
e.printStackTrace();
}
//最后将StringBuffer转换为字符串
return info.toString();
}
7.列出一个File类的方法
File file =new File(Environment.getExternalStorageDirectory(), "xxxx.jpg");
String name =file.getName();
String filename=file.getName();//获取文件名
System.out.println(filename);
String filepath=file.getAbsolutePath();//获取文件绝对路径
System.out.println(filepath);
String filepath2=file.getPath();//相对路径
System.out.println(filepath2);
String parentPath=file.getParent();//父路径
System.out.println(parentPath);
boolean b=file.exists();//判断文件是否存在
System.out.println(b);
本文详细介绍了Android应用中文件操作的基本方法,包括系统默认路径及自定义路径下的文件读写过程。涉及字节流与字符流的使用,以及利用ByteArrayOutputStream和BufferedReader进行数据解析的技术细节。

2338

被折叠的 条评论
为什么被折叠?



