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

來源:互聯網
上載者:User

標籤:android學習筆記之資料的sdcar   android操作sdcard卡   


(1)檔案的目錄


(2)各檔案的代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <ImageView        android:id="@+id/imageView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_alignRight="@+id/button1"        android:layout_marginRight="44dp"        android:layout_marginTop="78dp"        android:src="@drawable/ic_launcher" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_below="@+id/imageView1"        android:layout_marginLeft="96dp"        android:layout_marginTop="106dp"        android:text="Button" /></RelativeLayout>


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 blocke.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";@Overrideprotected 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() {@Overridepublic void onClick(View v) {new MyTask().execute(pathString);}});}class MyTask extends AsyncTask<String, Void, byte[]> {@Overrideprotected void onPreExecute() {super.onPreExecute();progressDialog.show();}@Overrideprotected byte[] doInBackground(String... params) {String name = params[0];imageName = name.substring(name.lastIndexOf("/") + 1, name.length());return HttpUtils.getImage(params[0]);}@Overrideprotected void onProgressUpdate(Void... values) {super.onProgressUpdate(values);}@Overrideprotected 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();}}@Overridepublic 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的許可權、測試的許可權

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.data_storage_sdcard"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <instrumentation        android:name="android.test.InstrumentationTestRunner"        android:targetPackage="com.example.data_storage_sdcard" >    </instrumentation>    <!-- 添加訪問sdcard的許可權 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 添加訪問網路的許可權 -->    <uses-permission android:name="android.permission.INTERNET" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <uses-library android:name="android.test.runner" />        <activity            android:name="com.example.data_storage_sdcard.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <uses-library>        </uses-library>    </application></manifest>




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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.