Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習筆記之數據的Sdcard存儲方法及操作sdcard的工具類

Android學習筆記之數據的Sdcard存儲方法及操作sdcard的工具類

編輯:關於Android編程

 

(1)文件的目錄

\

(2)各文件的代碼:

 

 

FileService.java也就是操作sdcard的工具類:

 

package com.example.data_storage_sdcard.file;

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 android.os.Environment;

/**
 * sdcard的存在於上下文無關
 * 
 * @author piaodangdehun
 * 
 */
public class FileService {

	/*
	 * 存放在sdcard的根目錄
	 */
	public boolean saveFileToSdcardRoot(String fileName, byte[] data) {
		boolean flag = false;
		/*
		 * 先判斷sdcard的狀態,是否存在
		 */
		String state = Environment.getExternalStorageState();
		FileOutputStream outputStream = null;
		File rootFile = Environment.getExternalStorageDirectory(); // 獲得sdcard的根路徑
		/*
		 * 表示sdcard掛載在手機上,並且可以讀寫
		 */
		if (state.equals(Environment.MEDIA_MOUNTED)) {
			File file = new File(rootFile, fileName);
			try {
				outputStream = new FileOutputStream(file);
				try {
					outputStream.write(data, 0, data.length);
					flag = true;
				} catch (IOException e) {
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} finally {
				if (outputStream != null) {
					try {
						outputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
		return flag;
	}

	/*
	 * 存放在sdcard下自定義的目錄
	 */
	public boolean saveFileToSdcardDir(String fileName, byte[] data) {
		boolean flag = false;
		/*
		 * 先判斷sdcard的狀態,是否存在
		 */
		String state = Environment.getExternalStorageState();
		FileOutputStream outputStream = null;
		File rootFile = Environment.getExternalStorageDirectory(); // 獲得sdcard的根路徑
		/*
		 * 表示sdcard掛載在手機上,並且可以讀寫
		 */
		if (state.equals(Environment.MEDIA_MOUNTED)) {
			File file = new File(rootFile.getAbsoluteFile() + /txt);
			if (!file.exists()) {
				file.mkdirs();
			}
			try {
				outputStream = new FileOutputStream(new File(file, fileName));
				try {
					outputStream.write(data, 0, data.length);
					flag = true;
				} catch (IOException e) {
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} finally {
				if (outputStream != null) {
					try {
						outputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
		return flag;
	}

	/*
	 * 用於讀取sdcard的數據
	 */
	public String readContextFromSdcard(String fileName) {

		String state = Environment.getExternalStorageState();
		File rooFile = Environment.getExternalStorageDirectory(); // 獲得sdcard的目錄

		FileInputStream inputStream = null;// 用於度取數據的流
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // 用於存放獨處的數據

		if (state.equals(Environment.MEDIA_MOUNTED)) {
			File file = new File(rooFile.getAbsoluteFile() + /txt/);// 在sdcard目錄下創建一個txt目錄
			File file2 = new File(file, fileName);
			int len = 0;
			byte[] data = new byte[1024];
			if (file2.exists()) {
				try {
					inputStream = new FileInputStream(file2);
					try {
						while ((len = inputStream.read(data)) != -1) {
							outputStream.write(data, 0, data.length);
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
					return new String(outputStream.toByteArray());
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					if (outputStream != null) {
						try {
							outputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
		return null;
	}

	/**
	 * 對文件進行分類的保存到固定的文件中去
	 * 
	 * @param fileName
	 * @param data
	 */
	public void saveFileToSdcardBySuff(String fileName, byte[] data) {
		// File file = Environment.getExternalStoragePublicDirectory();
		// 保存文件的目錄
		File file = null;
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {

			/*
			 * 將不同的文件放入到不同的類別中
			 */
			if (fileName.endsWith(.mp3)) {
				file = Environment
						.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
			} else if (fileName.endsWith(.jpg) || fileName.endsWith(.png)
					|| fileName.endsWith(.gif)) {
				file = Environment
						.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
			} else if (fileName.endsWith(.mp4) || fileName.endsWith(.avi)
					|| fileName.endsWith(.3gp)) {
				file = Environment
						.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
			} else {
				file = Environment
						.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
			}
			FileOutputStream outputStream = null;
			try {
				outputStream = new FileOutputStream(new File(file, fileName));
				try {
					outputStream.write(data, 0, data.length);
				} catch (IOException e) {
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} finally {
				if (outputStream != null) {
					try {
						outputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	/*
	 * 刪除一個文件
	 */
	public boolean deleteFileFromSdcard(String folder, String fileName) {
		boolean flag = false;
		File file = Environment.getExternalStorageDirectory();
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			File exitFile = new File(file.getAbsoluteFile() + / + folder);
			if (exitFile.exists()) {
				exitFile.delete();
			}
		}
		return flag;
	}
}

HttpUtils.java訪問網絡的

 

 

package com.example.data_storage_sdcard.http;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class HttpUtils {
	/*
	 * 
	 */
	public static byte[] getImage(String path) {
		byte[] data = null;
		HttpClient httpClient = new DefaultHttpClient();
		HttpPost httpPost = new HttpPost(path);
		try {
			HttpResponse response = httpClient.execute(httpPost);
			if (response.getStatusLine().getStatusCode() == 200) {
				data = EntityUtils.toByteArray(response.getEntity());
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			httpClient.getConnectionManager().shutdown();
		}

		return data;

	}
}

 

ImageCache.java將文件放到cache中的:

 

package com.example.data_storage_sdcard.img;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.os.Environment;

public class ImageCache {

	public static  String saveImageCache(String fileName, byte[] data) {
		File file = Environment.getExternalStorageDirectory(); // 根目錄
		FileOutputStream outputStream = null;
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			try {
				outputStream = new FileOutputStream(new File(file, fileName));
				outputStream.write(data, 0, data.length);

				return file.getAbsolutePath() + / + fileName;
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (outputStream != null) {
					try {
						outputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
		return null;
	}
}

MainActivity.java

 

 

package com.example.data_storage_sdcard;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

import com.example.data_storage_sdcard.http.HttpUtils;
import com.example.data_storage_sdcard.img.ImageCache;

public class MainActivity extends Activity {
	private Button button;
	private ImageView imageView;
	private ProgressDialog progressDialog;

	private String imageName;

	private final String pathString = http://www.baidu.com/img/bd_logo1.png;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) this.findViewById(R.id.button1);
		imageView = (ImageView) this.findViewById(R.id.imageView1);

		progressDialog = new ProgressDialog(this);
		progressDialog.setTitle(下載提示);
		progressDialog.setMessage(load...);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				new MyTask().execute(pathString);
			}
		});
	}

	class MyTask extends AsyncTask {

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			progressDialog.show();
		}

		@Override
		protected byte[] doInBackground(String... params) {
			String name = params[0];
			imageName = name
					.substring(name.lastIndexOf(/) + 1, name.length());
			return HttpUtils.getImage(params[0]);
		}

		@Override
		protected void onProgressUpdate(Void... values) {
			super.onProgressUpdate(values);
		}

		@Override
		protected void onPostExecute(byte[] result) {
			super.onPostExecute(result);
			if (result != null) {
				Bitmap bm = BitmapFactory.decodeByteArray(result, 0,
						result.length);
				imageView.setImageBitmap(bm);
				ImageCache.saveImageCache(, result);
			} else {
				imageView.setImageResource(R.drawable.ic_launcher);
			}
			progressDialog.dismiss();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

測試類:

 

 

package com.example.data_storage_sdcard;

import java.io.FileWriter;

import com.example.data_storage_sdcard.file.FileService;

import android.nfc.Tag;
import android.test.AndroidTestCase;
import android.util.Log;

public class MyTest extends AndroidTestCase {

	public void saveFileToSdcardTest() {
		FileService fileService = new FileService();

		fileService.saveFileToSdcardRoot(aa.txt,
				jkhdsfjkhdskjfhdsjf.getBytes());
	}

	public void saveFileToSdcardDir() {
		FileService fileService = new FileService();

		fileService.saveFileToSdcardRoot(aa.txt,
				jkhdsfjkhdskjfhdsjf.getBytes());
	}

	public void readContextFromSdcardTest() {
		FileService fileService = new FileService();
		String msg = fileService.readContextFromSdcard(aa.txt);
		System.err.println(--> + msg);
	}

	public void saveFileToSdcardBySuffTest() {
		FileService fileService = new FileService();
		fileService.saveFileToSdcardBySuff(aa.avi,
				asdfkajsgdhagsdfhdgsf.getBytes());
	}

	public void delFile() {
		FileService fileService = new FileService();
		boolean flag = fileService.deleteFileFromSdcard(txt, aa.txt);
	}
}

需要在請單位按中加入訪問網絡的權限、操作sdcard的權限、測試的權限

 

 




    

    
    
    
    
    
    

    
        

        
            
                

                
            
        

        
        
    



 


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved