import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.content.Context;
import android.os.Environment;
public class FileService {
private Context context;
public FileService(Context context) {
this.context = context;
}
// <!-- 在SDCard中创建与删除文件权限 -->
// <uses-permission
// android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
// <!-- 往SDCard写入数据权限 -->
// <uses-permission
// android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
public void saveToSDCard(String filename, String content) throws Exception {
//File file=new File("/mnt/sdcard",filename); 但是不建议这么写 因为可能因为版本的不同而变化;
File file = new File(Environment.getExternalStorageDirectory(),
filename);
FileOutputStream outStream = new FileOutputStream(file);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存文件
*
* @param filename
* 文件名称
* @param content
* 文件内容
*/
public void save(String filename, String content) throws Exception {
// 私有操作模式:创建出来的文件只能被本应用访问,其它应用无法访问该文件,另外采用私有操作模式创建的文件,写入文件中的内容会覆盖原文件的内容
FileOutputStream outStream = context.openFileOutput(filename,
Context.MODE_PRIVATE);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存文件
*
* @param filename
* 文件名称
* @param content
* 文件内容
*/
public void saveAppend(String filename, String content) throws Exception {// ctrl+shift+y//
// x
// Context.Mode_APPEND:和私有一样只能被本应用访问;不同点 检查文件是否存在; 存在就追加到原文件中;
FileOutputStream outStream = context.openFileOutput(filename,
Context.MODE_APPEND);
// content.getBytes(String encoding); 会使用 和系统指定的字符集编码; 如果没有指定 会使用iso8859-1;
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存文件
*
* @param filename
* 文件名称
* @param content
* 文件内容
*/
public void saveReadable(String filename, String content) throws Exception {
// 私有操作模式:创建出来的文件只能被本应用访问,其它应用无法访问该文件,另外采用私有操作模式创建的文件,写入文件中的内容会覆盖原文件的内容
FileOutputStream outStream = context.openFileOutput(filename,
Context.MODE_WORLD_READABLE);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存文件
*
* @param filename
* 文件名称
* @param content
* 文件内容
*/
public void saveWriteable(String filename, String content) throws Exception {
// writeable 文件不能被其他的读取; 但是能够被写入(自己感觉是覆盖里面的内容)
FileOutputStream outStream = context.openFileOutput(filename,
Context.MODE_WORLD_WRITEABLE);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 保存文件
*
* @param filename
* 文件名称
* @param content
* 文件内容
*/
public void saveRW(String filename, String content) throws Exception {
// 如果希望文件被其他应用读和写; 可以传入
// Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;
// 默认的写的模式写模式是覆盖掉;如果想追加的话 在fileoutputStream(file,true);
// 就会追加了;
FileOutputStream outStream = context.openFileOutput(filename,
Context.MODE_WORLD_WRITEABLE + Context.MODE_WORLD_READABLE);
outStream.write(content.getBytes());
outStream.close();
}
/**
* 读取文件内容
*
* @param filename
* 文件名称
* @return 文件内容
* @throws Exception
*/
public String read(String filename) throws Exception {
FileInputStream inStream = context.openFileInput(filename);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();// 装进内存缓存流;
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);// 先读取到内存中;
}
byte[] data = outStream.toByteArray();//字节流的数组;
return new String(data);
}
}
//-----------------------------------------------本应用中的testCase -----AndroidTestCase-------------------------------------------------------
public class FileServiceTest extends AndroidTestCase {
private static final String TAG = "FileServiceTest";
public void testRead() throws Throwable{
// 默认的是 保存到手机存储空间; 在本应用中这里不用写路径;
FileService service = new FileService(this.getContext());
String result = service.read("itcast.txt");
Log.i(TAG, result);
}
public void testSaveAppend() throws Throwable{
FileService service = new FileService(this.getContext());
service.saveAppend("append.txt", ",liming");
}
//----------------------------------------------------------------------other 其他应用中访问本应用的文件的TestCase-----------------------------------------
package cn.itcast.test;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import android.test.AndroidTestCase;
import android.util.Log;
public class AccessOtherAppFileTest extends AndroidTestCase {
private static String read(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = inStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
return new String(data);
}
public void testAccessFile() throws Throwable{
String path = "/data/data/cn.itcast.files/files/itcast.txt";
File file = new File(path);
FileInputStream inStream = new FileInputStream(file);
Log.i("AccessOtherAppFileTest", read(inStream));
}
public void testAccessFile2() throws Throwable{
String path = "/data/data/cn.itcast.files/files/append.txt";
File file = new File(path);
FileInputStream inStream = new FileInputStream(file);
Log.i("AccessOtherAppFileTest", read(inStream));
}
public void testAccessFile3() throws Throwable{
String path = "/data/data/cn.itcast.files/files/readable.txt";
File file = new File(path);
FileInputStream inStream = new FileInputStream(file);
Log.i("AccessOtherAppFileTest", read(inStream));
}
public void testAccessFile4() throws Throwable{
String path = "/data/data/cn.itcast.files/files/writeable.txt";
File file = new File(path);
FileInputStream inStream = new FileInputStream(file);
Log.i("AccessOtherAppFileTest", read(inStream));
}
public void testAccessFile5() throws Throwable{
// 在访问别的项目的文件的时候 需要指定路径;
String path = "/data/data/cn.itcast.files/files/writeable.txt";
File file = new File(path);
FileOutputStream outStream = new FileOutputStream(file);
outStream.write("itcast".getBytes());
outStream.close();
}
public void testAccessFile7() throws Throwable{
String path = "/data/data/cn.itcast.files/files/rw.txt";
File file = new File(path);
FileInputStream inStream = new FileInputStream(file);
Log.i("AccessOtherAppFileTest", read(inStream));
}
public void testAccessFile8() throws Throwable{
String path = "/data/data/cn.itcast.files/files/rw.txt";
File file = new File(path);
FileOutputStream outStream = new FileOutputStream(file,true);// 在fileout putStream 可以指定 是否追加到文件末尾; 默认是覆盖;
outStream.write("8888".getBytes());
outStream.close();
}
}