android 能讀取的文件都是系統(tǒng)里面的(這是系統(tǒng)不是開發(fā)壞境系統(tǒng),而是你程序運(yùn)行的環(huán)境系統(tǒng),也就是avd或者真實(shí)的手機(jī)設(shè)備的sd卡),這就需要你把文件導(dǎo)入你的環(huán)境中,mnt目錄底下,然后按到讀取sd卡的路徑讀取即可。
成都創(chuàng)新互聯(lián)專注于尼金平企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。尼金平網(wǎng)站建設(shè)公司,為尼金平等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
IO流(操作文件內(nèi)容): 字節(jié)流
參考:
AssetManager
assets 文件夾用于存儲(chǔ)應(yīng)用需要的文件,在安裝后可直接從其中讀取使用或者寫入本地存儲(chǔ)中
Android Studio 默認(rèn)不建立該文件夾,可以手動(dòng)新建 : app - src - main - assets
或者,右鍵 main - New - Folder - Assets Folder
AssetManager 對(duì)象可以直接訪問該文件夾:
獲取方法:
使用函數(shù) open 可以打開 assets 文件夾中對(duì)象,返回一個(gè) InputStream 對(duì)象:
open
獲取方法:
已經(jīng)開啟了授權(quán)讀取本地文件權(quán)限,但是依然無法讀取本地有些文件,這個(gè)原因很簡單了。
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"這句就可以了。
有的時(shí)候程序需要去對(duì)android的指定目錄或者全局目錄進(jìn)行遍歷獲取其中的文件,但是獲取文件的時(shí)候可能會(huì)遇到無法列出文件夾中的文件的問題,這就是出現(xiàn)的問題,對(duì)于某個(gè)子文件夾進(jìn)行獲取listFiles()的時(shí)候返回為NULL,也就是不允許列出文件夾中內(nèi)容。
這個(gè)是由于android中的安全機(jī)制的緣故,由于android繼承了Linux系統(tǒng)的傳統(tǒng),對(duì)于某個(gè)特定的目錄有用戶的權(quán)限,一共分為三種--可讀,可寫,可執(zhí)行;雖然說可以設(shè)置某個(gè)特定的目錄的權(quán)限,但是對(duì)于目錄里面的子目錄和子文件都可以進(jìn)行權(quán)限的設(shè)置,也就是說出了根目錄權(quán)限之外,子目錄本身的權(quán)限也決定了子目錄可否訪問,這一點(diǎ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 }
1. 讀取操作
String path = "/sdcard/foo.txt";
String content = ""; //文件內(nèi)容字符串
//打開文件
File file = new File(path);
//如果path是傳遞過來的參數(shù),可以做一個(gè)非目錄的判斷
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ù),可以做一個(gè)后綴名稱判斷; 沒有指定的文件名沒有后綴,則自動(dòng)保存為.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();
}
首先在百度手機(jī)助手或者在別的別的第三方下載工具里下載ireader,如圖所示。
2.下載下來軟件之后安裝在手機(jī)上。在手機(jī)文件管理器里找到pdf文件。
3.打開該文件,這時(shí)候自動(dòng)會(huì)默認(rèn)使用ireader軟件打開。這時(shí)候會(huì)提示需要安裝pdf組件。
4.點(diǎn)擊確定之后會(huì)自動(dòng)安裝pdf組件。安裝好之后,再次在文件管理器內(nèi)打開pdf文件。這時(shí)候就可以閱讀該文件了。