package com.robotium.solo;
import android.os.Environment;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
public class FileUtils {
public static void writeActivity(String activity){
writer(activity, Solo.Config.ACTIVITY, true);
}
public static void writeObject(Object obj){
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/Object");
if (!file.exists()) {
file.mkdirs();
}
try {
FileOutputStream fos = new FileOutputStream(file + "/" + MD5Utils.getMD5(obj.toString()));
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
oos.close();
fos.close();
} catch (IOException e) {
Log.w(Solo.LOG_TAG, "Object Not Serializable: " + obj);
e.printStackTrace();
}
}
/**
* The object is read from the specified directory on the SD card
* @param name filename
* @return Object
*/
public static Object readObject(String name){
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/Object");
if (!file.exists()) {
file.mkdirs();
}
Object object = null;
File target = new File(file + "/" + name);
com.robotium.solo.Log.d(Solo.LOG_TAG, "Object path: " + target.getAbsolutePath());
if (!target.exists()) {
throw new RuntimeException("Object file not found >> " + target.getAbsolutePath());
}
try {
FileInputStream fis = new FileInputStream(target);
ObjectInputStream ois = new ObjectInputStream(fis);
try {
object = ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ois.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return object;
}
public static void writeLog(String text){
writer(text, Solo.Config.LOG, true);
}
public static String readJson(){
StringBuilder sb = reader(Solo.Config.JSON);
return sb == null ? "" : sb.toString();
}
public static String readParams(){
StringBuilder sb = reader(Solo.Config.PARAMS);
return sb == null ? "" : sb.toString();
}
public static String readActivities(){
StringBuilder sb = reader(Solo.Config.ACTIVITY);
return sb == null ? "" : sb.toString();
}
public static boolean existsJson() {
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/" + Solo.Config.JSON);
return file.exists();
}
public static void deleteLog() {
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/" + Solo.Config.LOG);
if (file.exists()) {
boolean b = file.delete();
Log.d(Solo.LOG_TAG, "Delete result: " + b + " " + file.getAbsolutePath());
}
}
/**
* Delete activity screenshots, if crash, will not be implemented to this method.
* @param name activity full name e.g: com.xx.xxActivity
*/
public static void deleteScreenShots(String name){
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(String.format(Solo.Config.screenshotSavePath, pkg), name);
Log.d(Solo.LOG_TAG, "deleteScreenShots: " + file.getAbsolutePath());
try {
Runtime.getRuntime().exec("rm -rf " + file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deleteJson() {
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/" + Solo.Config.JSON);
if (file.exists()) {
boolean b = file.delete();
Log.d(Solo.LOG_TAG, "Delete result: " + b + " " + file.getAbsolutePath());
}
}
public static void deleteParams() {
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/" + Solo.Config.PARAMS);
if (file.exists()) {
boolean b = file.delete();
Log.d(Solo.LOG_TAG, "Delete result: " + b + " " + file.getAbsolutePath());
}
}
public static boolean existsForActivity() {
String pkg = PackageSingleton.getInstance().getPkg();
return new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/" + Solo.Config.ACTIVITY).exists();
}
public static void deleteActivity() {
String pkg = PackageSingleton.getInstance().getPkg();
File file = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg) + "/" + Solo.Config.ACTIVITY);
if (file.exists()) {
boolean b= file.delete();
Log.d(Solo.LOG_TAG, "Delete result: " + b + " " + file.getAbsolutePath());
}
}
public static void writeActivityParams(String string){
writer(string, Solo.Config.PARAMS, true);
}
public static void writeJson(String json){
writer(json, Solo.Config.JSON, false);
}
private static void writer(String string, String fileName, boolean append){
String pkg = PackageSingleton.getInstance().getPkg();
File exportDir = new File(Environment.getExternalStorageDirectory(),
String.format(Solo.Config.PATH, pkg));
if (!exportDir.exists()) {
boolean b = exportDir.mkdirs();
Log.d(Solo.LOG_TAG, "Mkdirs result: " + b + " " + exportDir.getAbsolutePath());
}
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exportDir + "/" + fileName, append)));
out.write(string + System.getProperty("line.separator"));
out.newLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static StringBuilder reader(String fileName){
StringBuilder sb = new StringBuilder();
String pkg = PackageSingleton.getInstance().getPkg();
File exportDir = new File(Environment.getExternalStorageDirectory(), String.format(Solo.Config.PATH, pkg));
if (!exportDir.exists()) {
Log.w(Solo.LOG_TAG, exportDir.getAbsolutePath() + " Not Found.");
return null;
}
File target = new File(exportDir + "/" + fileName);
if (!target.exists()) {
Log.w(Solo.LOG_TAG, target.getAbsolutePath() + " Not Found.");
return null;
}
Log.d(Solo.LOG_TAG, "Read file: " + target.getAbsolutePath());
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(target)));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append(System.getProperty("line.separator"));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sb;
}
}