最近在開發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. MVC 為頁面的list資料重新命名

    function ReBookFileName() {                              $("#div_sortable").find("li[ ...

  2. Windows Server 2003/2008 单网卡搭建VPN

    Windows Server 2003/2008 单网卡搭建VPN 1.打开[控制面板] --> [管理工具] --> [路由和远程访问] 2.鼠标右击你要管理的电脑 在弹出式菜单中选中[ ...

  3. maven自动部署到远程tomcat教程

    使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...

  4. 第九十九天上课 PHP TP框架 数据库查询和增加

    在Model文件夹下创建模型,文件命名规则 : 表名Model.class.php <?php namespace Home\Model; use Think\Model; class yong ...

  5. 测试table数据 winfrom datagridview 点击标头数字排序的时候table 列类型要为数字类型

    public DataTable GenerateData(int NoOfRecord){DataTable tbl = new DataTable();tbl.Columns.Add(new Da ...

  6. URL Parsing

    [URL Parsing] urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True) Parse a URL into six ...

  7. 使用python的subprocess启动windows程序提示WindowsError: [Error 6] The handle is invalid

    代码如下: subp = subprocess.Popen(cwd_path + "test.exe", cwd = cwd_path, shell = True, stdout ...

  8. C语课设心得分享(二)

    咱们今儿说说IDE的事儿. IDE是「集成开发环境」的意思,比如咱们常用的VC6.0,就是开发C语言所用的IDE的一种.对于IDE的认识,可能有些朋友有点儿模糊,咱们捋一捋,我也会给出一些IDE方面的 ...

  9. java自带BASE64工具进行图片和字符串转换

    java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  10. 基于阿里云服务器的git服务器搭建

    使用阿里云Ubuntu 12.0.4 64位操作系统做git服务器. 首先git服务器有两种访问方式可以选择:http方式和ssh的方式,http方式更容易使用. 1.http方式的git服务器搭建以 ...