android 能讀取的文件都是系統(tǒng)里面的(這是系統(tǒng)不是開發(fā)壞境系統(tǒng),而是你程序運行的環(huán)境系統(tǒng),也就是avd或者真實的手機(jī)設(shè)備的sd卡),這就需要你把文件導(dǎo)入你的環(huán)境中,mnt目錄底下,然后按到讀取sd卡的路徑讀取即可。
為蘆山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及蘆山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都做網(wǎng)站、蘆山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
有的時候程序需要去對android的指定目錄或者全局目錄進(jìn)行遍歷獲取其中的文件,但是獲取文件的時候可能會遇到無法列出文件夾中的文件的問題,這就是出現(xiàn)的問題,對于某個子文件夾進(jìn)行獲取listFiles()的時候返回為NULL,也就是不允許列出文件夾中內(nèi)容。
這個是由于android中的安全機(jī)制的緣故,由于android繼承了Linux系統(tǒng)的傳統(tǒng),對于某個特定的目錄有用戶的權(quán)限,一共分為三種--可讀,可寫,可執(zhí)行;雖然說可以設(shè)置某個特定的目錄的權(quán)限,但是對于目錄里面的子目錄和子文件都可以進(jìn)行權(quán)限的設(shè)置,也就是說出了根目錄權(quán)限之外,子目錄本身的權(quán)限也決定了子目錄可否訪問,這一點需要清楚了解,所以在判斷完了是否是目錄之外,還需要在進(jìn)行l(wèi)istFiles()獲取File[]數(shù)據(jù)后判斷獲取的數(shù)組是否為空,如果為空的話,文件夾是不可訪問的。樣例代碼如下:
01 package net.nowamagic.file;
02 import java.io.File;
03 import java.util.ArrayList;
04 import java.util.HashMap;
05 import java.util.Map;
06 import android.util.Log;
07 /**
08 * @author
09 * function 用于掃描SD卡上的文件
10 *
11 */
12 public class FileScan {
13
14 private static final String TAG = "FileScan";
15 public HashMapString, String getMusicListOnSys(File file) {
16
17 //從根目錄開始掃描
18 Log.i(TAG, file.getPath());
19 HashMapString, String fileList = new HashMapString, String();
20 getFileList(file, fileList);
21 return fileList;
22 }
23
24 /**
25 * @param path
26 * @param fileList
27 * 注意的是并不是所有的文件夾都可以進(jìn)行讀取的,權(quán)限問題
28 */
29 private void getFileList(File path, HashMapString, String fileList){
30 //如果是文件夾的話
31 if(path.isDirectory()){
32 //返回文件夾中有的數(shù)據(jù)
33 File[] files = path.listFiles();
34 //先判斷下有沒有權(quán)限,如果沒有權(quán)限的話,就不執(zhí)行了
35 if(null == files)
36 return;
37
38 for(int i = 0; i files.length; i++){
39 getFileList(files[i], fileList);
40 }
41 }
42 //如果是文件的話直接加入
43 else{
44 Log.i(TAG, path.getAbsolutePath());
45 //進(jìn)行文件的處理
46 String filePath = path.getAbsolutePath();
47 //文件名
48 String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
49 //添加
50 fileList.put(fileName, filePath);
51 }
52 }
53
54 }
已經(jīng)開啟了授權(quán)讀取本地文件權(quán)限,但是依然無法讀取本地有些文件,這個原因很簡單了。
application
android:allowBackup="true"
android:icon="@mipmap/logo128111"
android:label="@string/app_name"
android:roundIcon="@mipmap/logo128111"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:requestLegacyExternalStorage="true"
最關(guān)鍵的是要添加上 android:requestLegacyExternalStorage="true"這句就可以了。
1. 讀取操作
String path = "/sdcard/foo.txt";
String content = ""; //文件內(nèi)容字符串
//打開文件
File file = new File(path);
//如果path是傳遞過來的參數(shù),可以做一個非目錄的判斷
if (file.isDirectory()){
Toast.makeText(EasyNote.this, "沒有指定文本文件!", 1000).show();
}
else{
try {
InputStream instream = new FileInputStream(file);
if (instream != null) {
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
//分行讀取
while (( line = buffreader.readLine()) != null) {
content += line + "\n";
}
instream.close();
} catch (java.io.FileNotFoundException e) {
Toast.makeText(EasyNote.this, "文件不存在", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
2. 寫入操作
String filePath = "/sdcard/foo2.txt";
String content = "這是將要寫入到文本文件的內(nèi)容";
//如果filePath是傳遞過來的參數(shù),可以做一個后綴名稱判斷; 沒有指定的文件名沒有后綴,則自動保存為.txt格式
if(!filePath.endsWith(".txt") !filePath.endsWith(".log"))
filePath += ".txt";
//保存文件
File file = new File(filePath);
try {
OutputStream outstream = new FileOutputStream(file);
OutputStreamWriter out = new OutputStreamWriter(outstream);
out.write(content);
out.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
IO流(操作文件內(nèi)容): 字節(jié)流
參考:
AssetManager
assets 文件夾用于存儲應(yīng)用需要的文件,在安裝后可直接從其中讀取使用或者寫入本地存儲中
Android Studio 默認(rèn)不建立該文件夾,可以手動新建 : app - src - main - assets
或者,右鍵 main - New - Folder - Assets Folder
AssetManager 對象可以直接訪問該文件夾:
獲取方法:
使用函數(shù) open 可以打開 assets 文件夾中對象,返回一個 InputStream 對象:
open
獲取方法:
首先在百度手機(jī)助手或者在別的別的第三方下載工具里下載ireader,如圖所示。
2.下載下來軟件之后安裝在手機(jī)上。在手機(jī)文件管理器里找到pdf文件。
3.打開該文件,這時候自動會默認(rèn)使用ireader軟件打開。這時候會提示需要安裝pdf組件。
4.點擊確定之后會自動安裝pdf組件。安裝好之后,再次在文件管理器內(nèi)打開pdf文件。這時候就可以閱讀該文件了。