unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...
1、Unity中各路徑和目錄的對(duì)應(yīng)關(guān)系
image.png
其中,安卓中的路徑是有兩種分支的
image.png
在打包面板中,有個(gè)Write Access
當(dāng)我們選擇Internal Only就是表示沙盒路徑,/data/data/com.xxx.xxx/
對(duì)應(yīng)的Android方法為 getFilesDir()
當(dāng)我們選擇SDCard時(shí)就表示存儲(chǔ)到SD卡上,: /storage/emulated/0/Android/data/com.example.myapplication/files
2、各個(gè)路徑的特點(diǎn)
Resources
是作為一個(gè)Unity的保留文件夾出現(xiàn)的,也就是如果你新建的文件夾的名字叫Resources,那么里面的內(nèi)容在打包時(shí)都會(huì)被無條件的打到發(fā)布包中。
特點(diǎn):
只讀,即不能動(dòng)態(tài)修改。所以想要?jiǎng)討B(tài)更新的資源不要放在這里。
會(huì)將文件夾內(nèi)的資源打包集成到.asset文件里面。因此建議可以放一些Prefab,因?yàn)镻refab在打包時(shí)會(huì)自動(dòng)過濾掉不需要的資源,有利于減小資源包的大小。
資源讀取使用Resources.Load()。
任何平臺(tái)都可以用File讀取
StreamingAssets
StreamingAssets和Resources很像。同樣作為一個(gè)只讀的Unity3D的保留文件夾出現(xiàn)。不過兩者也有很大的區(qū)別,那就是Resources文件夾中的內(nèi)容在打包時(shí)會(huì)被壓縮和加密。而StreamingAsset文件夾中的內(nèi)容則會(huì)原封不動(dòng)的打入包中,因此StreamingAssets主要用來存放一些二進(jìn)制文件。在任何平臺(tái)中總可以統(tǒng)一使用Application.streamingAssetsPath 屬性來獲得這一文件夾路徑。
特點(diǎn):
PC端可讀寫,移動(dòng)端只讀不可寫。
主要用來存放二進(jìn)制文件,配置文件。
注意,在Android中,StreamingAssets中的文件包含在一個(gè).jar壓縮文件(基本上與標(biāo)準(zhǔn)的zip為統(tǒng)一格式)中,所以移動(dòng)端時(shí)只能用過UnityWebRequest類來讀取。在PC下,可以用File類API(如File.ReadAllText)讀寫StreamingAssets文件夾中的文件;在IOS和Android平臺(tái)下,不能用File類API讀取。
任何平臺(tái)都可以用www方式異步讀取該文件夾內(nèi)容。PC和IOS平臺(tái)下,讀取路徑必須加上"file://",而安卓不需要。
在IOS和Android下,還能用AssetBundle.LoadFromFile來同步讀取數(shù)據(jù)。
PersistentDataPath
這個(gè)路徑下是可讀寫。而且在IOS上就是應(yīng)用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的時(shí)候,ProjectSetting頁面有一個(gè)選項(xiàng)Write Access,可以設(shè)置它的路徑是沙盒還是sdcard。
特點(diǎn):
-可讀寫,不過只能運(yùn)行時(shí)才能寫入或者讀取。 提前將數(shù)據(jù)存入這個(gè)路徑是不可行的。
無內(nèi)容限制。你可以從 StreamingAsset 中讀取二進(jìn)制文件或者從 AssetBundle 讀取文件來寫入 PersistentDataPath 中。
寫下的文件,可以在電腦上查看。同樣也可以清掉。
可以使用UnityWebRequest類來讀取。
可以用File類API(如File.ReadAllText)讀寫PersistentDataPath文件夾中的文件(安卓下唯一可以用File類的路徑)
Application.DataPath
注意移動(dòng)端是沒有訪問權(quán)限的
3、Unity文件的讀寫方式
幾個(gè)文件操作類介紹
1、File類和FileInfo類的介紹:
File類和FileInfo類都是提供用于創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開文件的方法,一個(gè)是靜態(tài)的,一個(gè)是實(shí)例方法。簡(jiǎn)單來說,就是Flie類可以直接通過類名調(diào)用其中的某些函數(shù),而FileInfo類需要先實(shí)例化一個(gè)對(duì)象,再通過對(duì)象調(diào)用函數(shù)。一般來說,如果是對(duì)文件進(jìn)行少量的操作,則建議用File類,如果是對(duì)文件進(jìn)行大量的存取操作,建議用FileInfo類,具體原因參照這 。 這里是官方的文檔,File類, FileInfo類。
2、FileStream類和StreamWriter,StreamReader類的簡(jiǎn)單介紹:
FileStream類是一個(gè)操作類,FileStream 對(duì)象表示在磁盤或網(wǎng)絡(luò)路徑指向文件的流,這個(gè)類提供了在文件中讀寫字節(jié)的方法。簡(jiǎn)單來說就是這個(gè)Filestream這個(gè)文件流對(duì) .txt等文件讀寫內(nèi)容時(shí)需要使用的一個(gè)工具。如果File類是一個(gè)總的文件的話,那么fileStream類就是對(duì)文件進(jìn)行操作的筆。 FileStream類和StreamWriter,StreamReader類的區(qū)別在于FileStream類操作的是字節(jié)和字節(jié)數(shù)組,而StreamWriter等類操作的是字符數(shù)據(jù)。StreamWriter類操作的只能是文本類型的,而FileStream類的對(duì)象可以是任何類型的。操作文本的話用StreamWriter等比較方便。
下面是用File和FileInfo兩種方式去創(chuàng)建文件,以及用StreamWriter寫文件的方法
File方式
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class FileOperate : MonoBehaviour {
public void WriteFileByLine(string file_path,string file_name,string str_info)
{
StreamWriter sw;
if(!File.Exists(file_path+"//"+file_name))
{
sw=File.CreateText(file_path+"//"+file_name);//創(chuàng)建一個(gè)用于寫入 UTF-8 編碼的文本
Debug.Log("文件創(chuàng)建成功!");
}
else
{
sw=File.AppendText(file_path+"//"+file_name);//打開現(xiàn)有 UTF-8 編碼文本文件以進(jìn)行讀取
}
sw.WriteLine(str_info);//以行為單位寫入字符串
sw.Close ();
sw.Dispose ();//文件流釋放
}
void Start()
{
WriteFileByLine (Application.persistentDataPath,"my_newfile.txt","信息");
}
}
FileInfo方式
public void WriteFileByLine(string file_path,string file_name,string str_info)
{
StreamWriter sw;
FileInfo file_info = new FileInfo (file_path+"//"+file_name);
if(!file_info.Exists)
{
sw=file_info.CreateText();//創(chuàng)建一個(gè)用于寫入 UTF-8 編碼的文本
Debug.Log("文件創(chuàng)建成功!");
}
else
{
sw=file_info.AppendText();//打開現(xiàn)有 UTF-8 編碼文本文件以進(jìn)行讀取
}
sw.WriteLine(str_info);
sw.Close ();
sw.Dispose ();//文件流釋放
}
4、Unity路徑解疑
上面了解各個(gè)路徑的特性,讀寫方式,但是還有一個(gè)經(jīng)常容易犯錯(cuò)的地方,就是路徑的寫法。
Unity3D關(guān)于路徑資源的調(diào)用分為絕對(duì)路徑和相對(duì)路徑,
絕對(duì)路徑
windows下:
path = "file://D:\TestFile\Cat\" + Number + ".png";
這種寫法,因?yàn)樾备苄枰D(zhuǎn)移,所以這里是雙斜杠,不然報(bào)語法錯(cuò)誤,有些時(shí)候沒寫雙斜杠但又不報(bào)語法錯(cuò),但是路徑是錯(cuò)誤的,就很難發(fā)現(xiàn)問題。
所以建議用另外一種寫法:
@"file:///D:\TestFile\Cat" + Number + ".png";或者@"file://D:\TestFile\Cat" + Number + ".png";
file后面跟三個(gè)斜杠或者兩個(gè)斜杠都行。
安卓下:
path ="jar:file://"+PersistentDataPath(示例)+ Number + ".png";
注:因?yàn)樵诎沧肯聦?duì)unity來說也只有PersistentDataPath,StreamingAssets這幾個(gè)路徑是可用的,通常不會(huì)這么使用,可以忽略,而且絕對(duì)路徑限制大,一般采用相對(duì)路徑。
相對(duì)路徑
PC上:
url = Application.persistentDataPath + "/mydir/qq.txt";
或者
string path= Path.Combine(Application.persistentDataPath, fillName);
安卓下:
"file://" + Application.streamingAssetsPath + "\TestFile\Cat\" + Number + ".png";
"file://" + Application.PersistentDataPath+ "\TestFile\Cat\" + Number + ".png";
或者"file://" + Path.Combine(Application.persistentDataPath, fillName);
總之,路徑寫法的東西,不行就多是一兩次就好了。
總結(jié)
以上是生活随笔為你收集整理的unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟信用卡不用会扣钱吗?
- 下一篇: java如何循环调用方法_Java:调用