最近在開發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. WampServer服务中MySQL无法正常启动解决方案

    打开wampserver->mysql->my.ini,添加或修改innodb_force_recovery = 1 然后重启所有服务就大功告成了!

  2. redis 安装使用

    在 centos 7.2 系统上,安装使用redis.了解学习redis功能及特性. 版本: 3.2.4 1.安装: # yum install redis 2.配置: /etc/logrotate. ...

  3. bootstrap分页插件--Bootstrap Paginator的使用&AJAX版备份(可单独使用)

    html部分: <ul class="pagination"></ul> <!--bootstrap3版本用ul包裹--> <div cl ...

  4. 随笔—邀请赛前训— Codeforces Round #330 (Div. 2) Vitaly and Night

    题意:给你很多对数,要么是0要么是1.不全0则ans++. 思路即题意. #include<cstdio> #include<cstring> #include<iost ...

  5. JavaIDL开发CORBA实例演示

    转载 http://www.micmiu.com/opensource/corba/corba-javaidl-dev-demo/

  6. how spring resolves a request

    quoted from answer at http://stackoverflow.com/questions/14015642/how-does-the-dispatcherservlet-res ...

  7. Python_sklearn机器学习库学习笔记(一)_一元回归

    一.引入相关库 %matplotlib inline import matplotlib.pyplot as plt from matplotlib.font_manager import FontP ...

  8. IOS s数据存储之归档解档

    #import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...

  9. Hibernate框架—简介

    ORM对象/关系数据库映射 ORM全称Object/Relation Mapping,对象/关系数据库映射,可以理解成一种规范.该框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射. ORM ...

  10. Java类路径

    Java 类路径告诉 java 解释器和 javac 编译器去哪里找它们要执行或导入的类. 类(您可能注意到的那些 *.class 文件)可以存储在目录或 jar 文件中,或者存储在两者的组合中, 但 ...