android文件讀寫

android文件的讀寫主要分爲兩個方面,一個是將內容寫入本應用的data文件夾中,另一個是將內容寫入到sdcard中。兩者都使用I/O流的讀寫技術。

下面具體具體介紹這兩方面的內容:

一。將內容寫入本應用中:

/**
	 * @description:將內容保存到內置存儲中
	 * @author:Administrator
	 * @return:boolean
	 * @param fileName
	 *            文件名
	 * @param fileContent
	 *            文件內容
	 * @param context
	 *            上下文對象
	 * @return
	 */

	public static boolean fileSaveApp(String fileName, String fileContent,
			Context context) {
		try {
			// 用android提供的輸出流來將內容寫入到文件中,注意mode的用途
			FileOutputStream fos = context.openFileOutput(fileName,
					context.MODE_APPEND);
			fos.write(fileContent.getBytes());
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return false;
	}


注意android的上下文對象context在這個方法中起的的作用(可以用它來打開一個輸出流,或者打開一個輸入流),還有文件的寫入模式。這裏用的是文件的追加模式。數據時只可被本應用操作的。

 

二。將數據寫入sdcard中

 

/**
	 * @description:將內容寫入到sdcard的文件當中
	 * @author:Administrator
	 * @return:boolean
	 * @param fileName
	 *            文件名
	 * @param fileContent
	 *            文件內容
	 * @param path
	 *            文件路徑
	 * @return
	 */

	public static boolean fileSave(String fileName, String fileContent,
			File path) {
		File file = new File(path, fileName);
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		FileOutputStream fos = null;
		int count = 0;
		try {
			fos = new FileOutputStream(file);
			count = fileContent.getBytes().length;
			fos.write(fileContent.getBytes(), 0, count);
			fos.close();
			return true;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return false;
	}


注意這個方法中的path參數指的是sdcard的路徑:=Environment.getExternalStorageDirectory();

注意寫入數據的時候需要判斷sdcard是否存在是否可寫:Environment.getExternalStorageState().equals(
       Environment.MEDIA_MOUNTED);

最後需要注意如果要向sdcard寫入數據必須在manifest.xml加入權限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />第一個權限是指對sdcard可寫,第二個權限是指可以在sdcard中建立和刪除文件。

 

最後將從應用的data中讀取數據的方法也寫進來:

 

/**
	 * @description:讀取本應用data文件夾中文件的內容(如果要讀取sdcard中的文件時一定要去判斷sdcard是否存在,並且是可讀的)
	 * @author:Administrator
	 * @return:String 文件的內容
	 * @param fileName
	 *            文件名
	 * @param context
	 *            上下文對象
	 * @return
	 */

	public static String readFile(String fileName, Context context) {
		String str = "";
		
			try {
				FileInputStream fis = context.openFileInput(fileName);
				ByteArrayOutputStream bos = new ByteArrayOutputStream();
				byte[] buffer = new byte[1024];
				int len = 0;
				while ((len = fis.read(buffer)) != -1) {
					// 用字節輸出流將讀到的內容寫入到內存中
					bos.write(buffer, 0, len);
				}
				// 將輸出流中的數據轉換爲String
				str = new String(bos.toByteArray(), "utf-8");
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}

		return str;
	}


這裏就不再介紹從sdcard中讀取文件內容的方法了。

 

 

這裏將android本應用的文件存儲的4中方式列舉出來:可以參考 http://www.cnblogs.com/jqyp/archive/2010/09/13/1825249.html

Context.MODE_PRIVATE:爲默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件。
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
如果希望文件被其他應用讀和寫,可以傳入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

 

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章