您的位置:首页 > 移动开发 > Android开发

Android的文件操作

2016-01-19 16:12 369 查看
关于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