閱讀340 返回首頁    go 技術社區[雲棲]


Android開發5——文件讀寫


一、基本概念

在Android應用中保存文件,保存的位置有兩處

①手機自帶的存儲空間,較小(如200M),適合保存一些小文件,Android中保存位置在data/data/應用包名/files目錄

②外存儲設備如SD卡,較大,適合保存大文件如視頻,Android中保存位置在mnt/sdcard目錄,androd1.5,android1.6保存在sdcard目錄

保存的位置通過android的file explorer視圖可以找到

 

 

二、例子

/**
 * 文件操作類
 * 
 * @author XY
 * 
 */
public class FileService
{
	/**
	 * 上下文對象
	 */
	private Context context;

	public FileService(Context context)
	{
		super();
		this.context = context;
	}

	/**
	 * 保存文件至手機自帶的存儲空間
	 * 
	 * @param filename 文件名
	 * @param fileContent 文件內容
	 */
	@SuppressWarnings("static-access")
	public void save(String filename, String fileContent) throws Exception
	{
		FileOutputStream fos = context.openFileOutput(filename, context.MODE_PRIVATE); // 默認保存在手機自帶的存儲空間
		fos.write(fileContent.getBytes("UTF-8"));
		fos.close();
	}

	/**
	 * 保存文件至SD卡
	 * 
	 * @param filename 文件名
	 * @param fileContent 文件內容
	 */
	public void saveInSDCard(String filename, String fileContent) throws Exception
	{
		// 若文件被保存在SDCard中,該文件不受讀寫控製
		File file = new File(Environment.getExternalStorageDirectory(), filename);
		FileOutputStream fos = new FileOutputStream(file);
		fos.write(fileContent.getBytes("UTF-8"));
		fos.close();
	}

	/**
	 * 讀取文件內容
	 * 
	 * @param filename 文件名
	 * @return
	 */
	public String read(String filename) throws Exception
	{
		FileInputStream fis = context.openFileInput(filename); // 默認到手機自帶的存儲空間去找
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		// 將內容讀到buffer中,讀到末尾為-1
		while ((len = fis.read(buffer)) != -1)
		{
			// 本例子將每次讀到字節數組(buffer變量)內容寫到內存緩衝區中,起到保存每次內容的作用
			outStream.write(buffer, 0, len);
		}
		// 取內存中保存的數據
		byte[] data = outStream.toByteArray();
		fis.close();
		String result = new String(data, "UTF-8");
		return result;
	}
}

MainActivity

try
{
	// 存儲在手機自帶存儲空間
	fs.save(filename, fileContent);
	Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();

	// 存儲在外部設備SD卡
	// 判斷SDCARD是否存在和是否可讀寫
	if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
	{
		fs.saveInSDCard(filename, fileContent);
		Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();
	}
	else
	{
		Toast.makeText(getApplicationContext(), R.string.failsdcard, Toast.LENGTH_SHORT).show();
	}

}
catch (Exception e)
{
	Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_SHORT).show();
	Log.e(tag, e.getMessage());
}

文件名不帶路徑,直接輸入如xy.txt

 

對於SD卡的操作,需要在AndroidManifest.xml加入權限

	<!-- 在SDCard中創建和刪除文件的權限 -->
	<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

	<!-- 往SDCard中寫入數據的權限 -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

三、一些API

①Environment.getExternalStorageDirectory()獲取的路徑為mnt/sdcard目錄,對於android1.5,1.6的路徑是sdcard目錄
②Activity中提供了兩個API

getCacheDir()獲取的路徑為data/data/應用包名/cache目錄

getFilesDir()獲取的路徑為data/data/應用包名/files目錄

 

 

最後更新:2017-04-03 05:40:35

  上一篇:go C#委托基礎7——匿名方法
  下一篇:go Android開發11——手機橫屏和豎屏與android:configChanges