編輯:關於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; } }
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; } }
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); } }
1. Testing http://developer.android.com/tools/testing/index.html Android的框架包含了一組完整的
還原堆內存溢出的錯誤首先來還原一下堆內存溢出的錯誤。首先在SD卡上放一張照片,分辨率為(3776 X 2520),大小為3.88MB,是我自己用相機拍的一張照片。應用的布
實現方式 實現的方式有很多種 這裡總結最常見的幾種方式,以後再添加其他的。viewPager + RadioGroup viewPager + FragmentTabHo
本文實例為大家分享了Android實現搜索功能,並且需要顯示搜索的歷史記錄,供大家參考,具體內容如下效果圖:本案例實現起來很簡單,所以可以直接拿來嵌入項目中使用,涉及到的