package com.snail.travellingTrail.common.utils;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.List;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
public class FileUtil
{
/**
* 删除文件
*
* @param context
* 程序上下文
* @param fileName
* 文件名,要在系统内保持唯一
* @return boolean 存储成功的标志
*/
public static boolean deleteFile(Context context, String fileName)
{
return context.deleteFile(fileName);
}
/**
* 文件是否存在
*
* @param context
* @param fileName
* @return
*/
public static boolean exists(Context context, String fileName)
{
return new File(context.getFilesDir(), fileName).exists();
}
/**
* 存储文本数据
*
* @param context
* 程序上下文
* @param fileName
* 文件名,要在系统内保持唯一
* @param content
* 文本内容
* @return boolean 存储成功的标志
*/
public static boolean writeFile(Context context, String fileName, String content)
{
boolean success = false;
FileOutputStream fos = null;
try
{
fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
byte[] byteContent = content.getBytes();
fos.write(byteContent);
success = true;
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (fos != null) fos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
return success;
}
/**
* 存储文本数据
*
* @param context
* 程序上下文
* @param fileName
* 文件名,要在系统内保持唯一
* @param content
* 文本内容
* @return boolean 存储成功的标志
*/
public static boolean writeFile(String filePath, String content)
{
boolean success = false;
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(filePath);
byte[] byteContent = content.getBytes();
fos.write(byteContent);
success = true;
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (fos != null) fos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
return success;
}
/**
* 读取文本数据
*
* @param context
* 程序上下文
* @param fileName
* 文件名
* @return String, 读取到的文本内容,失败返回null
*/
public static String readFile(Context context, String fileName)
{
if (!exists(context, fileName)) { return null; }
FileInputStream fis = null;
String content = null;
try
{
fis = context.openFileInput(fileName);
if (fis != null)
{
byte[] buffer = new byte[1024];
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while (true)
{
int readLength = fis.read(buffer);
if (readLength == -1) break;
arrayOutputStream.write(buffer, 0, readLength);
}
fis.close();
arrayOutputStream.close();
content = new String(arrayOutputStream.toByteArray());
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
content = null;
}
finally
{
try
{
if (fis != null) fis.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
return content;
}
/**
* 读取文本数据
*
* @param context
* 程序上下文
* @param fileName
* 文件名
* @return String, 读取到的文本内容,失败返回null
*/
public static String readFile(String filePath)
{
if (filePath == null || !new File(filePath).exists()) { return null; }
FileInputStream fis = null;
String content = null;
try
{
fis = new FileInputStream(filePath);
if (fis != null)
{
byte[] buffer = new byte[1024];
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while (true)
{
int readLength = fis.read(buffer);
if (readLength == -1) break;
arrayOutputStream.write(buffer, 0, readLength);
}
fis.close();
arrayOutputStream.close();
content = new String(arrayOutputStream.toByteArray());
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
content = null;
}
finally
{
try
{
if (fis != null) fis.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
return content;
}
/**
* 读取文本数据
*
* @param context
* 程序上下文
* @param fileName
* 文件名
* @return String, 读取到的文本内容,失败返回null
*/
public static String readAssets(Context context, String fileName)
{
InputStream is = null;
String content = null;
try
{
is = context.getAssets().open(fileName);
if (is != null)
{
byte[] buffer = new byte[1024];
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while (true)
{
int readLength = is.read(buffer);
if (readLength == -1) break;
arrayOutputStream.write(buffer, 0, readLength);
}
is.close();
arrayOutputStream.close();
content = new String(arrayOutputStream.toByteArray());
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
content = null;
}
finally
{
try
{
if (is != null) is.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
return content;
}
/**
* 存储单个Parcelable对象
*
* @param context
* 程序上下文
* @param fileName
* 文件名,要在系统内保持唯一
* @param parcelObject
* 对象必须实现Parcelable
* @return boolean 存储成功的标志
*/
public static boolean writeParcelable(Context context, String fileName, Parcelable parcelObject)
{
boolean success = false;
FileOutputStream fos = null;
try
{
fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
Parcel parcel = Parcel.obtain();
parcel.writeParcelable(parcelObject, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
byte[] data = parcel.marshall();
fos.write(data);
success = true;
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (fos != null)
{
try
{
fos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
return success;
}
/**
* 存储List对象
*
* @param context
* 程序上下文
* @param fileName
* 文件名,要在系统内保持唯一
* @param list
* 对象数组集合,对象必须实现Parcelable
* @return boolean 存储成功的标志
*/
public static boolean writeParcelableList(Context context, String fileName, List<Parcelable> list)
{
boolean success = false;
FileOutputStream fos = null;
try
{
if (list instanceof List)
{
fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
Parcel parcel = Parcel.obtain();
parcel.writeList(list);
byte[] data = parcel.marshall();
fos.write(data);
success = true;
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (fos != null)
{
try
{
fos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
return success;
}
/**
* 读取单个数据对象
*
* @param context
* 程序上下文
* @param fileName
* 文件名
* @return Parcelable, 读取到的Parcelable对象,失败返回null
*/
@SuppressWarnings("unchecked")
public static Parcelable readParcelable(Context context, String fileName, ClassLoader classLoader)
{
Parcelable parcelable = null;
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
try
{
fis = context.openFileInput(fileName);
if (fis != null)
{
bos = new ByteArrayOutputStream();
byte[] b = new byte[4096];
int bytesRead;
while ((bytesRead = fis.read(b)) != -1)
{
bos.write(b, 0, bytesRead);
}
byte[] data = bos.toByteArray();
Parcel parcel = Parcel.obtain();
parcel.unmarshall(data, 0, data.length);
parcel.setDataPosition(0);
parcelable = parcel.readParcelable(classLoader);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
parcelable = null;
}
finally
{
if (fis != null) try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if (bos != null) try
{
bos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return parcelable;
}
/**
* 读取数据对象列表
*
* @param context
* 程序上下文
* @param fileName
* 文件名
* @return List, 读取到的对象数组,失败返回null
*/
@SuppressWarnings("unchecked")
public static List<Parcelable> readParcelableList(Context context, String fileName, ClassLoader classLoader)
{
List<Parcelable> results = null;
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
try
{
fis = context.openFileInput(fileName);
if (fis != null)
{
bos = new ByteArrayOutputStream();
byte[] b = new byte[4096];
int bytesRead;
while ((bytesRead = fis.read(b)) != -1)
{
bos.write(b, 0, bytesRead);
}
byte[] data = bos.toByteArray();
Parcel parcel = Parcel.obtain();
parcel.unmarshall(data, 0, data.length);
parcel.setDataPosition(0);
results = parcel.readArrayList(classLoader);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
results = null;
}
finally
{
if (fis != null) try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if (bos != null) try
{
bos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return results;
}
public static boolean saveSerializable(Context context, String fileName, Serializable data)
{
boolean success = false;
ObjectOutputStream oos = null;
try
{
oos = new ObjectOutputStream(context.openFileOutput(fileName, Context.MODE_PRIVATE));
oos.writeObject(data);
success = true;
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (oos != null)
{
try
{
oos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return success;
}
public static Serializable readSerialLizable(Context context, String fileName)
{
Serializable data = null;
ObjectInputStream ois = null;
try
{
ois = new ObjectInputStream(context.openFileInput(fileName));
data = (Serializable) ois.readObject();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (ois != null)
{
try
{
ois.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return data;
}
/**
* 从assets里边读取字符串
*
* @param context
* @param fileName
* @return
*/
public static String getFromAssets(Context context, String fileName)
{
try
{
InputStreamReader inputReader = new InputStreamReader(context.getResources().getAssets().open(fileName));
BufferedReader bufReader = new BufferedReader(inputReader);
String line = "";
String Result = "";
while ((line = bufReader.readLine()) != null)
Result += line;
return Result;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* 复制文件
*
* @param srcFile
* @param dstFile
* @return
*/
public static boolean copy(String srcFile, String dstFile)
{
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
File dst = new File(dstFile);
if (!dst.getParentFile().exists())
{
dst.getParentFile().mkdirs();
}
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(dstFile);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1)
{
fos.write(buffer, 0, len);
}
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if (fos != null)
{
try
{
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return true;
}
}