1. 程式人生 > >Android中根據byte陣列生成檔案並儲存到手機

Android中根據byte陣列生成檔案並儲存到手機

今天講的是根據獲得的byte陣列生成檔案。並將檔案儲存到手機的記憶體裝置上。(儲存到哪裡根據你自己建立檔案時檔案所在的路徑決定,這裡我就直接儲存在手機記憶體裝置上。)
廢話不多說,新建一個android專案,在MainActivity中直接上程式碼:

package com.example.edittextresearch;

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

import android.app.Activity;
import
android.os.Bundle; import android.os.Environment; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); // 假設這是從伺服器上獲取的資料,或者其他的什麼地方獲取到的。
byte[] bytes = "hello world".getBytes(); // 根據byte陣列生成檔案,儲存到手機上 createFileWithByte(bytes); // 彈出資訊提示 Toast.makeText(MainActivity.this, "生成檔案成功!", Toast.LENGTH_LONG).show(); } private String fileName;// 檔案命名 private void initData() { // TODO Auto-generated method stub
fileName = "byte_to_file.doc"; } /** * 根據byte陣列生成檔案 * * @param bytes * 生成檔案用到的byte陣列 */ private void createFileWithByte(byte[] bytes) { // TODO Auto-generated method stub /** * 建立File物件,其中包含檔案所在的目錄以及檔案的命名 */ File file = new File(Environment.getExternalStorageDirectory(), fileName); // 建立FileOutputStream物件 FileOutputStream outputStream = null; // 建立BufferedOutputStream物件 BufferedOutputStream bufferedOutputStream = null; try { // 如果檔案存在則刪除 if (file.exists()) { file.delete(); } // 在檔案系統中根據路徑建立一個新的空檔案 file.createNewFile(); // 獲取FileOutputStream物件 outputStream = new FileOutputStream(file); // 獲取BufferedOutputStream物件 bufferedOutputStream = new BufferedOutputStream(outputStream); // 往檔案所在的緩衝輸出流中寫byte資料 bufferedOutputStream.write(bytes); // 刷出緩衝輸出流,該步很關鍵,要是不執行flush()方法,那麼檔案的內容是空的。 bufferedOutputStream.flush(); } catch (Exception e) { // 列印異常資訊 e.printStackTrace(); } finally { // 關閉建立的流物件 if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (bufferedOutputStream != null) { try { bufferedOutputStream.close(); } catch (Exception e2) { e2.printStackTrace(); } } } } }

我在程式碼中都加了註釋,大家看起來也很簡單。大概講講:

  • 首先需要獲取byte型別陣列資料,這裡我是用的假設的資料,實際中大家傳送網路請求獲取即可;
  • 資料拿到後就可以將其寫到檔案緩衝輸出流中,然後呼叫flush()方法刷出流物件,這樣檔案裡面就有內容了。

下面附上我的手機上檔案的儲存路徑圖片和開啟後的內容。如下所示:

1> 檔案存到手機上的圖片如下所示:

這裡寫圖片描述

2> 選擇檔案的開啟方式如下圖所示:

這裡寫圖片描述

3> 檔案開啟後的顯示如下圖所示:

這裡寫圖片描述

這個就不上傳原始碼了,直接看上面寫的程式碼就可以很簡單的實現。

每天進步一點點!加油!