android創建文件的許可權
『壹』 Android——Android10的分區存儲(Scoped Storage)
在Android10以前,只要程序獲得了READ_EXTERNAL_STORAGE許可權,就可以隨意讀取外部的存儲公有目錄。只要程序獲得了WRITE_EXTERNAL_STORAGE許可權,就可以隨意在寫入外部存儲的公有目錄上新建文件或文件夾
於是Google在Android10中提出了分區存儲,意在限製程序對外部存儲中公有目錄的使用。
分區存儲對內部存儲私有目錄和外部存儲私有目錄都沒有影響
簡單來說就是,在Android10中,
使用分區存儲的應用對自己創建的文件始終擁有讀/寫許可權, 無論文件是否位於應用的私有目錄內 ,所臘好以,如果應用僅保存和訪問自己創建的文件,則無需請求獲得READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE許可權
如果要訪問其他應用創建的文件,則需要READ_EXTERNAL_STORAGE許可權。並且仍然只能使用MediaStore提供的API或是SAF訪問。
這里需要注意的是,MediaStore提供的API只能訪問圖片、視頻、音頻,如果需要訪問其它任意格式的文件,需要使用SAF,它會調用系統內置的文件瀏覽器供用戶自主選擇文件
Android Q規定了App有兩種存儲空間模式視圖:Legacy View、Filtered View
系統通過下列方式確定App的運行模式:
判斷當前App運行的是什麼模式,可以通過Environment提供的API進行判斷
MediaStore提供了下列幾種類型圓悶的訪問Uri,通過查找對應Uri數據,達到訪問的目的。
我們還可以使用getContentUri獲取所有<volumeName>
MediaProvider對於App存放到公共目錄文件,通過ContentResolver insert方法中Uri來確定
MediaStroe通過不同Uri,為用戶提供了增、刪、改方法,許可權對應如下
例如PDF,PDF為非媒體類文件,因此我們不能通過MediaStore來獲取,對於這種其他類型的文件,一般使用SAF來讓用戶選擇
我們也推薦使用SAF讓用戶自己去創建,IntentAction為:ACTION_CREATE_DOCUMENT
訪問app-specific分為橘局彎兩種情況,一種是訪問App自身App-specific目錄,第二是訪問其他App目錄文件
Android Q,App如果啟動了Filtered View,那麼只能直接訪問自己目錄的文件:
App是FilteredView,其他App無法直接訪問當前App私有目錄,需要通過以下方法:
『貳』 安卓開發中,需要創建一個新文件,並讀寫,要加入什麼許可權
安卓開發中,需要創建一個新文件,並讀寫,要加入什麼許可權?
如果是在手機上新建,需要root許可權,手機要先破解。如果不是在手機上操作那不需要許可權,直接在電腦上弄好了刷進去就可以了。
linux下創建一個新文件用什麼命令
1. touch filename 建立一個空文件
2. cat > filename 建立一文件,然後把接下來的鍵盤輸入寫入文件,直到按Ctrl+D為止
還有像樓上說的把/dev/null復制過去
Word和Excel中創建一個新文件,在該文件中創建一個宏,那個宏是什麼意思?
是一小段程序代碼
安卓開發 assets中怎麼更新文件
讀輸入流的方法:通過讀輸入流返回一個String
/**
* 讀輸入流
*
* @param is
* @return
*/
public static String getStringByInputStream(InputStream is) {
String content = null;
try {
if (is != null) {
byte[] buffer = new byte[is.available()];
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while (true) {
int readLength = is.read(buffer);
if (readLength == -1)
break;
arrayOutputStream.write(buffer, 0, readLength);
}
is.close();
arrayOutputStream.close();
content = new String(arrayOutputStream.toByteArray());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
content = null;
} finally {
try {
if (is != null)
is.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
return content;
}
讀assets文件的方法:
public static String readAssets(Context context, String fileName) {
InputStream is = null;
try {
is = context.getAssets().open(fileName);
} catch (IOException e) {
e.printStackTrace();
}
return getStringByInputStream(is);
}
3
讀raw文件的方法:
public static String readRaws(Context context, int id) {
InputStream is = context.getResources().openRawResource(id);
return getStringByInputStream(is);
}
在文件哪創建一個新文件夾叫 SAVE 就可以了~~~~~~~~~~~~ ,怎麼創建啊要圖
明白了,
右擊游戲圖標-屬性-查找目標-右擊-新塵巧猜建-文件夾-命名-OK
電腦無法創建一個新文件夾怎麼辦
無法創建新文件夾的問題,一般可能是以下原因引起的 1 許可權設置不當 檢查相關許可權,檢查WINDOWS用戶是否擁有建立文件的許可權,如果沒有,請換用管理員登陸,或者使用管理員舔加管理許可權。如果是管理員,在gpedit.msc里添加相關許可權。 2 磁碟管理錯誤 如果長時間的使用BT和電驢等派型P2P軟體,磁碟緩存設置不當也寬吵可能造成磁碟目錄的混亂,從而造成磁碟目錄錯誤,引起目錄檢索錯誤,引發問題出現。 3 磁碟控制器錯誤 一般來說這種錯誤很罕見,正常情況更新磁碟驅動即可解決問題。也不知道是不是你的軟體沖突所致。如果是硬碟上集成的控制器出問題了見最後的回答。 4 易失性數據錯誤 一般來說是由系統文件的紊亂錯誤引起的,但是你重新安裝過系統,問題也就排除了。 使用優化大師對你的盤進行檢測和修復,如果這樣還不行的話我就暫時沒有辦法了. 電腦中毒了。 先在安全模式殺毒再創建文件夾
怎麼樣用CMD在D盤創建一個新文件夾?
cmd 回車
d: 回車
md 文件夾名稱 回車
為什麼word會總動保存創建一個新文件與桌面
問題 表述不清,據猜測,樓主是問每打開一個word文件,都會看到一個新文件自動創建,那是word自動創建的一個臨時文件,關閉文檔後,這個臨時文件會被自動刪除掉,通常情況它是隱藏文件,如果這個臨時文件沒有被刪除掉,如果文檔出現問題了,可以通過這個臨時文件恢復挽救一部分內容。
打開coreldrawX4時能不能自動創建一個新文件。
可以,在選項-工作區-常規里有個CorelDRAW啟動,後面有選項.
如何在虛擬光碟機里創建一個新文件夾
那要在沒有載入之前編輯ISO文件加入的,已經載入了 是沒有辦法創建,因為光碟機格式是只讀模式的.
『叄』 android 10 文件夾和文件創建
Android 10 改變了文件的存儲方式不允許應用隨意創建文件夾了,要用安卓提供的文件夾,提供的文件夾如下
public static void createPath(String path) {
File file =new File(path);
if (!file.exists()) {
try {
// 獲取父文件
File parent = file.getParentFile();
if( !parent.exists() ) {
parent.mkdirs(); //創建所有父文件夾
}
file.createNewFile();
}catch (IOException e) {
e.printStackTrace();
}
}
}
『肆』 解決Android創建文件夾失敗
在開發過程中,使用File.mkdirs()會返回false創建文件夾失敗,有可能是許可權不夠的原因,需要在AndroidManifest.xml中添加如下許可權:
但有的許可權可能會報Permission is only granted to system apps錯誤,導致許可權申請失敗,
原因是運行時許可權:API 23之前的版本都是自動獲取許可權,而從 Android 6.0 開始添加了許可權申請的需求,更加安全。在android6.0以前,我們程序需要的許可權我們一般只需要在AndroidManifest.xml中直接更新就好,然而Android 6.0在我們原有的AndroidManifest.xml聲明許可權的基礎上,又新增了運行時許可權動態檢測。
如果你的程序在6.0以上的手機報許可權的問題,簡單粗暴最有效的解決方法是在工程下的build.gradle中的 targetSdkVersion 改為21或22,因為Android6.0系統或以上默認為targetSdkVersion小於23的應用默認授予了所申請的所有許可權。
『伍』 Android的許可權都有哪些
(一)linux文件系統上的許可權
-rwxr-x--x system system 4156 2010-04-30 16:13 test.apk
代表的是相應的用戶/用戶組及其他人對此文件的訪問許可權,與此文件運行起來具有的許可權完全不相關。
比如上面的例子只能說明system用戶擁有對此文件的讀寫執行許可權;system組的用戶對此文件擁有讀、執行許可權;其他人對此文件只具有執行許可權。
而test.apk運行起來後可以干哪些事情,跟這個就不相關了。
千萬不要看apk文件系統上屬於system/system用戶及用戶組,或者root/root用戶及用戶組,就認為apk具有system或root許可權
(二)Android的許可權規則
(1)Android中的apk必須簽名
這種簽名不是基於權威證書的,不會決定某個應用允不允許安裝,而是一種自簽名證書。
重要的是,android系統有的許可權是基於簽名的。比如:system等級的許可權有專門對應的簽名,簽名不對,許可權也就獲取不到。
默認生成的APK文件是debug簽名的。
獲取system許可權時用到的簽名,見:如何使Android應用程序獲取系統許可權
(2)基於UserID的進程級別的安全機制
大家都知道,進程有獨立的地址空間,進程與進程間默認是不能互相訪問的,是一種很可靠的保護機制。
Android通過為每一個安裝在設備上的包(apk)分配唯一的linux userID來實現,名稱為"app_"加一個數字,比如app_43
不同的UserID,運行在不同的進程,所以apk之間默認便不能相互訪問。
Android提供了如下的一種機制,可以使兩個apk打破前面講的這種壁壘。
在AndroidManifest.xml中利用sharedUserId屬性給不同的package分配相同的userID,通過這樣做,兩個package可以被當做同一個程序,
系統會分配給兩個程序相同的UserID。當然,基於安全考慮,兩個package需要有相同的簽名,否則沒有驗證也就沒有意義了。
(這里補充一點:並不是說分配了同樣的UserID,兩程序就運行在同一進程, 下面為PS指令摘取的,
顯然,system、app_2分別對應的兩個進程的PID都不同,不知Android到底是怎樣實現它的機制的)
User PID PPID
system 953 883 187340 55052 ffffffff afe0cbcc S system_server
app_2 1072 883 100264 19564 ffffffff afe0dcc4 S com.android.inputmethod.
system 1083 883 111808 23192 ffffffff afe0dcc4 S android.process.omsservi
app_2 1088 883 156464 45720 ffffffff afe0dcc4 S android.process.acore
(3)默認apk生成的數據對外是不可見的
實現方法是:Android會為程序存儲的數據分配該程序的UserID。
藉助於Linux嚴格的文件系統訪問許可權,便實現了apk之間不能相互訪問似有數據的機制。
例:我的應用創建的一個文件,默認許可權如下,可以看到只有UserID為app_21的程序才能讀寫該文件。
-rw------- app_21 app_21 87650 2000-01-01 09:48 test.txt
如何對外開放?
<1> 使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE 標記。
When creating a new file with getSharedPreferences(String, int), openFileOutput(String, int), or openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory), you can use the MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE flags to allow any other package to read/write the file. When setting these flags, the file is still owned by your application, but its global read and/or write permissions have been set appropriately so any other application can see it.
(4)AndroidManifest.xml中的顯式許可權聲明
Android默認應用是沒有任何許可權去操作其他應用或系統相關特性的,應用在進行某些操作時都需要顯式地去申請相應的許可權。
一般以下動作時都需要申請相應的許可權:
A particular permission may be enforced at a number of places ring your program's operation:
At the time of a call into the system, to prevent an application from executing certain functions.
When starting an activity, to prevent applications from launching activities of other applications.
Both sending and receiving broadcasts, to control who can receive your broadcast or who can send a broadcast to you.
When accessing and operating on a content provider.
Binding or starting a service.
在應用安裝的時候,package installer會檢測該應用請求的許可權,根據該應用的簽名或者提示用戶來分配相應的許可權。
在程序運行期間是不檢測許可權的。如果安裝時許可權獲取失敗,那執行就會出錯,不會提示用戶許可權不夠。
大多數情況下,許可權不足導致的失敗會引發一個 SecurityException, 會在系統log(system log)中有相關記錄。
(5)許可權繼承/UserID繼承
當我們遇到apk許可權不足時,我們有時會考慮寫一個linux程序,然後由apk調用它去完成某個它沒有許可權完成的事情,很遺憾,這種方法是行不通的。
前面講過,android許可權是經營在進程層面的,也就是說一個apk應用啟動的子進程的許可權不可能超越其父進程的許可權(即apk的許可權),
即使單獨運行某個應用有許可權做某事,但如果它是由一個apk調用的,那許可權就會被限制。
實際上,android是通過給子進程分配父進程的UserID實現這一機制的。
(三)常見許可權不足問題分析
首先要知道,普通apk程序是運行在非root、非system層級的,也就是說看要訪問的文件的許可權時,看的是最後三位。
另外,通過system/app安裝的apk的許可權一般比直接安裝或adb install安裝的apk的許可權要高一些。
言歸正傳,運行一個android應用程序過程中遇到許可權不足,一般分為兩種情況:
(1)Log中可明顯看到許可權不足的提示。
此種情況一般是AndroidManifest.xml中缺少相應的許可權設置,好好查找一番許可權列表,應該就可解決,是最易處理的情況。
有時許可權都加上了,但還是報許可權不足,是什麼情況呢?
Android系統有一些API及許可權是需要apk具有一定的等級才能運行的。
比如 SystemClock.setCurrentTimeMillis()修改系統時間,WRITE_SECURE_SETTINGS許可權好像都是需要有system級的許可權才行。
也就是說UserID是system.
(2)Log里沒有報許可權不足,而是一些其他Exception的提示,這也有可能是許可權不足造成的。
比如:我們常會想讀/寫一個配置文件或其他一些不是自己創建的文件,常會報java.io.FileNotFoundException錯誤。
系統認為比較重要的文件一般許可權設置的也會比較嚴格,特別是一些很重要的(配置)文件或目錄。
如
-r--r----- bluetooth bluetooth 935 2010-07-09 20:21 dbus.conf
drwxrwx--x system system 2010-07-07 02:05 data
dbus.conf好像是藍牙的配置文件,從許可權上來看,根本就不可能改動,非bluetooth用戶連讀的權利都沒有。
/data目錄下存的是所有程序的私有數據,默認情況下android是不允許普通apk訪問/data目錄下內容的,通過data目錄的許可權設置可知,其他用戶沒有讀的許可權。
所以adb普通許可權下在data目錄下敲ls命令,會得到opendir failed, Permission denied的錯誤,通過代碼file.listfiles()也無法獲得data目錄下的內容。
『陸』 安卓12根目錄禁止創建文件
右鍵屬性點擊最後的安全把寫入後面的禁止創建文件的勾去掉就行。
在文件夾里操作寫入是非常容易的事情,直接點擊滑鼠右鍵復制粘貼或是利用快捷鍵操作就可以做得到。但有些人在某個文件夾里放了重要的文件,而電腦又不是個人用而是共用的,所以他們會希望將這個文件夾設置禁止寫入,不被別人輕易操作或是刪除掉。要將文件夾做到這點不難,但需要掌握相關的設置方法。
隨著使用電腦的人越來越多,自己電腦的隱私受到很多人的重視很多人都會講自己的電腦設置密碼或者是將文件夾寫入許可權。很多時候,別人會動我們的電腦然後隨意的修改或亂放入我們的文件夾裡面的文件,那麼如果不想讓你的文件夾被別人操作的話就可以對文件夾設置禁止寫入的許可權,這樣也能更好的保護文件夾。