android開發之路10(文件的讀寫)

来源:http://www.cnblogs.com/smallkure/archive/2016/03/19/5294693.html
-Advertisement-
Play Games

1.安卓中文件的數據存儲實例(將文件保存到手機自帶存儲空間中): ①MainActivity.java public class MainActivity extends Activity implements OnClickListener{ private Button mButton; pri


1.安卓中文件的數據存儲實例(將文件保存到手機自帶存儲空間中):

①MainActivity.java

public class MainActivity extends Activity implements OnClickListener{

private Button mButton;

private EditText etFilename;

private EditText etFileContent;

/**

 * 文件的保存:

 * 第一步:創建佈局文件(包括文件名的填寫,內容的填寫);

 * 第二步:在我們的主Activity中獲取控制項的對象,並給按鈕設置監聽器,用來完成獲取填寫內容,和保存文件的操作

 * 第三步:通常我們都會將項目中的業務類放到service層中,因此我們需要創建業務類,並完成文件的寫入功能

 */

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mButton=(Button) findViewById(R.id.button);

        mButton.setOnClickListener(this);

        

    }

@Override

public void onClick(View v) {

etFilename=(EditText) findViewById(R.id.filename);

etFileContent=(EditText) findViewById(R.id.filecontent);

String filename=etFilename.getText().toString();

String filecontent=etFileContent.getText().toString();

FileService service=new FileService(getApplicationContext());

 

try {

service.save(filename,filecontent);

Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show();

} catch (Exception e) {

Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_LONG);

e.printStackTrace();

}

}

 

②FileService .java

public class FileService {

private Context context;

 

public FileService(Context context) {

this.context = context;

}

//保存文件到手機內部存儲

public void save(String filename,String filecontent) throws Exception{

/**

 * FileOutputStream:文件輸出流

 * openFileOutput()方法中:

 * 參數1.要保存的文件名稱;參數2.保存文件的操作模式

 * 這裡我們使用私有操作模式,即創建出來的文件只能被本應用訪問,其他應用無法訪問該文件,

 * 另外採用私有操作模式創建的文件,寫入文件中的內容會覆蓋源文件的內容

 */

FileOutputStream outputStream=context.openFileOutput(filename, Context.MODE_PRIVATE);

outputStream.write(filecontent.getBytes());

outputStream.close();

}

//讀取文件從手機內部存儲

public String read(String filename) throws Exception{

//FileInputStream:文件輸入流 

FileInputStream inputStream=context.openFileInput(filename);

ByteArrayOutputStream outputStream=new ByteArrayOutputStream();

byte[] buffer=new byte[1024];

int len=0;

while((len=inputStream.read(buffer)) != -1){

outputStream.write(buffer, 0, len);

}

byte[] data=outputStream.toByteArray();

 

return new String(data);

 

}

 

 

}

③單元測試類:FileServiceTest .java

public class FileServiceTest extends AndroidTestCase{

 

private static final String TAG="FileServiceTest";

//單元測試方法testSave()方法用來測試我們的save(String filename,String filecontent)方法是否有錯

public void testSave() throws Throwable{

FileService service=new FileService(this.getContext());

service.save("456.txt", "sdfdgsdfasd");

Log.i(TAG, "成功");

}

//單元測試testRead()方法用來測試我們的read(String filename)方法是否有錯

public void testRead() throws Throwable{

FileService service=new FileService(this.getContext());

String result=service.read("123.txt");

Log.i(TAG, result);

}

}

④清單文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.rookie.test1"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="10"

        android:targetSdkVersion="10" />

    <!--指定單元測試的唯一標識  -->

<instrumentation 

    android:name="android.test.InstrumentationTestRunner"

    android:targetPackage="com.rookie.test1"

    android:label="testapp"/>

    <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=".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>

    </application>

 

</manifest>

⑤佈局文件activity_main.xml(省略)

 

2.安卓中文件的數據存儲實例(將數據保存到手機的SD卡中)

要想將數據保存到sd卡中,我們首先要在清單文件中設置相關的使用許可權,

如:

<!--在sd卡中創建文件與刪除文件的許可權  -->

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

    <!--往sd卡中寫入數據的許可權  -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然後我們需要在上面的那個實例中的FileService.java添加一個方法,

用來保存文件到手機sdcard

public void saveToSDCard(String filename,String filecontent) throws Exception{

File file=new File(Environment.getExternalStorageDirectory(), filename);

FileOutputStream outputStream=new FileOutputStream(file);

outputStream.write(filecontent.getBytes());

outputStream.close();

}

然後我們需要在MainActivity.java文件中將之前重寫的onClick()方法改寫成:

@Override

public void onClick(View v) {

etFilename=(EditText) findViewById(R.id.filename);

etFileContent=(EditText) findViewById(R.id.filecontent);

String filename=etFilename.getText().toString();

String filecontent=etFileContent.getText().toString();

FileService service=new FileService(getApplicationContext());

 

try {

//判斷sd卡是否存在,並可以讀寫

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

service.saveToSDCard(filename, filecontent);

Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show();

}else{

Toast.makeText(getApplicationContext(), R.string.sd_error, Toast.LENGTH_LONG).show();

}

 

} catch (Exception e) {

Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_LONG);

e.printStackTrace();

}

至此,我們已經完成了文件寫入sd卡的功能代碼,那麼運行一下試試看吧!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是一道面試題, 請先思考,在看講解 :) 講解如下: 1. main() , 列印的結果為: undefined , 1 a. > 來看第一個列印的值為什麼是 undefined。 在js中,方法和變數的聲明都是會提前的。也就是說不管你在何處聲明的方法或者變數,在js解析時,都會將其提前,具體看代
  • 外部裝備有兩種方法
  • (我會慢慢總結 這些以後 直接參考 不必百度谷歌 否則你一旦離開了百度谷歌 你啥都不是!) 知識擴展 Number()函數可以替代IsNaN()函數做是否非數字驗證,但是Number()返回NaN,IsNaN()返回boolean值。 有時候做字元串非空驗證可以用 “” 也可判斷Length是否為0
  • hover3d.js是一款效果超酷的滑鼠滑過圖片3D卡片效果jQuery插件。通過該插件可以製作出滑鼠滑過圖片時,圖片3D傾斜,旋轉的效果,非常有層次感。 使用該jQuery插件需要在頁面中引入jquery和jquery.hover3d.min.js文件 該滑鼠滑過圖片效果的HTML結構如下:包裹元
  • 我的博客: "http://bigdots.github.io" 、 "http://www.cnblogs.com/yzg1/" 繼承有什麼好處?很簡單,繼承了你爸的財產,自己就可以少奮鬥點嘛。開玩笑,言歸正傳,繼承使子類擁有超類的作用域、屬性與方法,可以節省程式設計的時間。ECMAScript實
  • 問題: 在做即時通訊時,需要提示用戶有幾條未讀的提醒,這個是(如果有新的提示消息立馬在瀏覽器無刷新提示)即時獲取的。但我們的做法是,當用戶點擊未讀信息進入到信息顯示頁面時重新獲取下未讀的提醒;但是在IE瀏覽器下,在新視窗打開以後沒有重新獲取請求,再次刷新頁面也沒有看到請求地址。但是如果將鏈接打開方式
  • "Whenever this property changes, apply that change slowly." The property transition: width 2s says “when the width changes, animate it over the course
  • 分類:C#、Android、VS2015; 創建日期:2016-03-19 一、簡介 Android系統定義了一系列獨立的圖形處理類,其中,2D圖形處理類分別位於以下命名空間: Android.Graphices Android.Graphics.Drawable.Shapes Android.Vi...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...