最近在開發App,會使用到必須要處理一些App所使用的資料,上網路查一下Android 得作法,包含我自己也實作了一下,可能是因為對Java || Android 不是很孰悉,常常錯在 java.lang.illegalargumentexception  這上面,查一下Xamarin 論壇:http://forums.xamarin.com/discussion/333/how-to-save-a-string-on-internal-isolated-storage-with-mono-for-android 在建立檔案夾的時候也會出現,所以我看了一下,乾脆就依照Xamarin 的特性使用System.IO 下的方法來處理.. 介紹一下今天案例:

就是我將資料寫入至 internal storage 預設路徑下根的 note.txt 並且讀取出來,之後我也嘗試建立一個play檔案夾,並且寫檔note.txt之後讀取出來

//  Internal Storage Methods.
 
/// <summary>
/// 將String寫入至Internal Storage 
/// </summary>
/// <param name="filename"></param>
/// <param name="content"></param>
public void WriteAllText(string filename, string content)
{
 
    //如果前面沒有 / 則補上
    if (filename[0] != '/')
    {
        filename = "/" + filename;
    }
 
    //預設讀取 data/data/[package name]/files
    if (filename.Contains("/"))
    {    
        Directory.CreateDirectory(GetFileStreamPath("") + filename.Substring(0, filename.LastIndexOf('/')));
    }
 
    System.IO.File.WriteAllText(GetFileStreamPath("") + filename, content);
}
 
/// <summary>
/// 將文字讀取出來
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public string ReadAllText(string filename)
{
    try
    {
 
        if (filename[0] != '/')
        {
            filename = "/" + filename;
        }
        return System.IO.File.ReadAllText(GetFileStreamPath("") + filename);
 
 
    }
    catch (Exception ex)
    {
        throw;
    }
 
}

這兩隻function,如果你傳入的路徑,是沒有檔案夾的,會自動幫忙建立 寫入/讀取 根 /data/data/[packagename]/files/ 的部分:

var btnSave = FindViewById<Button>(Resource.Id.btnSave);
btnSave.Click += delegate
{
    WriteAllText("note.txt", "大家好我是當麻許!!" + DateTime.Now.ToString());
 
};
 
 
var btnRead = FindViewById<Button>(Resource.Id.btnRead);
btnRead.Click += delegate
{
    try
    {
        var message = ReadAllText("note.txt");
        Toast.MakeText(this, message, ToastLength.Short).Show();
 
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
    }
};

結果 :

用文件管理器檢視:

寫入至檔案夾中的:

var btnDirWrite = FindViewById<Button>(Resource.Id.btnDirWrite);
btnDirWrite.Click += delegate
{
    try
    {
        WriteAllText(@"play/note.txt", "大家好我是檔案夾中的當麻許!!" + DateTime.Now.ToString());
 
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
    }
};
 
var btnDirRead = FindViewById<Button>(Resource.Id.btnDirRead);
btnDirRead.Click += delegate
{
    try
    {
        var res = ReadAllText(@"play/note.txt");
        Toast.MakeText(this, res, ToastLength.Short).Show();
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
    }
};


ps.請注意瞜,因為基本上只有APP 本身可以存取Internal Storage 的部分,所以我手機是因為root 過才能看到,至於傳統android 寫法中可以讓其他app存取的屬性MODE_WORLD_WRITEABLE , MODE_WORLD_READABLE 接下來android 官方建議 也是 Android provides a way for you to expose even your private data to other applications — with a content provider. A content provider is an optional component that exposes read/write access to your application data, subject to whatever restrictions you want to impose. For more information about using content providers, see the Content Providers documentation. 所以不建議用這種方式跟其他APP 開放資料溝通瞜..
參考資料:  http://developer.android.com/guide/topics/data/data-storage.html http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_WRITEABLE

[Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)的更多相关文章

  1. [Xamarin] 開啟另外一個Activity 並且帶資料 (转帖)

    每隻App是透過許多畫面所組成的,當然可能主畫面之外,都會有許多其他的頁面 再Android 設計中畫面會有配合的Activity 當然在這之前,最好事先了解一下,Android 關於生命週期的規劃 ...

  2. [Xamarin] 關於發出Notification 的大小事 (转帖)

    關於Anroid 的使用者來說,Notification 是一個非常會看到且用到的功能 他可以提醒使用者甚麼東西需要待處理,像是郵件或是會議的提醒等.. 甚至有些APP ,直接使用Notificati ...

  3. [Xamarin] 關於SQLite 的操作 (转帖)

    我們聊一下常用的東西,SQLite,這東西很常用到,當再寫手機APP的時候,有時候會在Client 做 cache或是做一些資料的管理都很必須會用到,我們來看看今天的範例 建立SQL Lite 資料庫 ...

  4. [Xamarin] 透過WebClient跟網路取得資料 (转帖)

    之前寫過一篇文章,關於在Android上面取得資料 透過GET方式傳資料給Server(含解決中文編碼問題) 我們來回顧一下 Android 端的Code: 有沒有超多,如果是在Xaramin下面,真 ...

  5. 開博客了, 因為搞Delphi 開發的關於Delphi學習

    開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...

  6. 關於Validform 控件 值得注意的地方

    Validform控件其實用起來挺方便的,直接百度就能找到官網,有直接的demo做參考.這些我就不提了,我所要說的是關於Validform控件的ajax的提交. Validform中有個參數ajaxP ...

  7. 在laravel下關於blade模板的嘗試

    Blade模板 關於模板繼承和分區段 @section和@yield的實驗 ①關於@section...@show嘗試 測試1 {{--appV2test.blade.php--}} <html ...

  8. Android 中 Internal Storage 和 External Storage 的区别

    Android 存储:Internal Storage的用法以及与External storage 的区别 - 庄宏基的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net ...

  9. 用Xamarin和Visual Studio编写iOS App

    一说开发 iOS app,你立马就会想到苹果的开发语言 Objective C/Swift 和 Xcode.但是,这并不是唯一的选择,我们完全可以使用别的语言和框架. 一种主流的替换方案是 Xamar ...

随机推荐

  1. JS 計算文本域還能輸入多少個字符

    //輸入計數 //count:能輸入的數據總量    function Calculation(v, count) {        var span = $(v).next();        va ...

  2. IE8下使用webuploader点击无反应的解决方法。

    在IE8开头添加如下代码. <meta http-equiv="X-UA-Compatible" content="IE=edge"> 即可解决,亲 ...

  3. 学习打造自己的DEBUG_NEW

    学习范例http://www.cppblog.com/Robertxiao/archive/2012/11/05/194547.html 在使用MFC库开发程序时,我非常喜欢MFC框架中的内存泄漏诊断 ...

  4. 在django中使用自定义标签实现分页功能

    效果演示: github地址:https://github.com/mncu/django_projects/tree/master/django_projects/pagination_test 本 ...

  5. C++基于TCP和UDP的socket通信

    以下是关于socket编程的一个非常经典的例子: 服务端: #include <stdio.h> #include <Winsock2.h> //windows socket的 ...

  6. centos7.2下编译安装git

    centos最新的7.2版本,git居然是1.8,而最新的git版本是2.9 差的太多了,何况git2.0后有大更新.于是,我决定编译安装.中间有一点小破折,记录一下,备忘. 1,下载最新的源码,网址 ...

  7. android_Activity之Button_OnClickListener

    今天我们要讲的主要是四大组件之一Activity 什么是Android 的四大组件呢?接下来简单了解下. 1.Activity  Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的 ...

  8. CUnit的用法

    转自:http://blog.csdn.net/scucj/article/details/4385630/ CUnit下载地址: http://sourceforge.net/projects/cu ...

  9. iOS崩溃日志记录工具--CrashlyTics

    http://try.crashlytics.com Crashlytics优势: 1.Crashlytics基本不会漏掉任何应用崩溃的信息 2.Crashlytics对崩溃日志管理很人性化,会根据崩 ...

  10. [2015hdu多校联赛补题]hdu5299 Circles Game

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5299 题意: 在欧几里得平面上有n个圆,圆之间不会相交也不会相切,现在Alice和Bob玩游戏,两人轮 ...