package gpatmobile.tunion.com.mytest;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class FilesUtil {
/**
* 保存文件内容MODE_PRIVATE覆盖
*
* @param c
* @param fileName 文件名称
* @param content 内容
*/
public static void writeFiles(Context c, String fileName, String content)
throws Exception {
// 打开文件获取输出流,文件不存在则自动创建
FileOutputStream fos = c.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
}
/**
* 保存文件内容MODE_APPEND追加
*
* @param c
* @param fileName 文件名称
* @param content 内容
*/
public static void writeAddFiles(Context c, String fileName, String content)
throws Exception {
// 打开文件获取输出流,文件不存在则自动创建
FileOutputStream fos = c.openFileOutput(fileName, Context.MODE_APPEND);
fos.write(content.getBytes());
fos.close();
}
/**
* 读取文件内容
*
* @param c
* @param fileName 文件名称
* @return 返回文件内容
*/
public static String readFiles(Context c, String fileName) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
FileInputStream fis = null;
String content = "";
try {
// if(!fileIsExists(fileName))
// {
// Log.i("files", "not found files"+fileName);
// return "";
// }
fis = c.openFileInput(fileName);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
content = baos.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.i("files error", "not found files" + fileName);
e.printStackTrace();
return "";
} finally {
try {
if (null != fis)
fis.close();
if (null != baos)
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return content;
}
public static boolean fileIsExists(String strFile) {
try {
File f = new File(strFile);
if (!f.exists()) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
public static void writeFileSdcardFile(String fileName, String content) {
if (TextUtils.isEmpty(fileName)) {
return;
}
try {
content = "[" + TimeUtil.getCurrentDateString() + "]" + " " + content;
File logFile = new File(fileName);
Log.i("fileName", fileName);
if (!logFile.exists()) {
logFile.createNewFile();
}
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\n");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeFileSdcardFileSHIMING(String fileName, String content) {
try {
content = "[" + TimeUtil.getCurrentDateString() + "]" + " " + content;
File logFile = new File(fileName);
Log.i("fileName", fileName);
if (!logFile.exists()) {
logFile.createNewFile();
}
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\n");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
return true;
} else {
return false;
}
} else {
return false;
}
}
}
存储内容
Android中的文件存储机制是一种基本的存储数据的方式,其不对数据进行任何格式化的处理,所以这种方式适用于存储一些简单的文本数据或者二进制数据;
Context中提供一个openFileOutput()的方法,将数据存储在指定的文件下;该方法实现传入两个数据参数,
- 其中一个是参数是文件名,注意这里的文件名不可以包含路径,它的默认讯储存位置是、data/datta/<package>files/下面 的,
- 第二个是文件的操作模式,其数值有两种,默认的是MODE_PRIVATE表示当指定的文件名相同时,写入的数据会覆盖源文件中的内容;另一个是MODE_APPEND表示的是如果文件夹下存在相同的文件名,则是往文件里追加内容;其实本来是的操作,模式有四个,其他两个MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE,由于这两个模式允许其他的程序操作文件,所以在以前的版本就取消了;
取出内容
类似于将数据存储到文件中,Context 类中还提供了一个 openFileInput() 方法,用于从文件中读取数据。
openFileInput() 方法只接收一个参数,即要读取的文件名,然后系统会自动到 /data/data/<包名>/files/ 目录下去加载这个文件,并返回一个 FileInputStream 对象。
实例:
try {
FilesUtil.writeFiles(MainActivity.this, "yhl.txt", "abc");
FilesUtil.writeFiles(MainActivity.this, "yhll.txt", "abcd");
Log.e("yhl", FilesUtil.readFiles(MainActivity.this, "yhl.txt"));
Log.e("yhl", FilesUtil.readFiles(MainActivity.this, "yhll.txt"));
Log.e("yhl", "onCreate: " + getApplicationContext().getFilesDir().toString());
FilesUtil.deleteFile(getApplicationContext().getFilesDir().toString() + "/" + "yhl.txt");
Log.e("yhl", FilesUtil.readFiles(MainActivity.this, "yhl.txt"));
Log.e("yhl", FilesUtil.readFiles(MainActivity.this, "yhll.txt"));
FilesUtil.writeAddFiles(MainActivity.this, "yhll.txt", "abcd");
Log.e("yhl", FilesUtil.readFiles(MainActivity.this, "yhll.txt"));
} catch (Exception e) {
e.printStackTrace();
}