天天看點

Android如何讀寫assets、raw、sdard和工程檔案

Android開發離不開對檔案的操作,下面來看下Android是怎麼操作其内置目錄檔案及外部sdcard資料的。

資源檔案:

/assets目錄下test.txt

/res/raw目錄下rawfile.txt

一、讀取assets目錄下的檔案

InputStream is = getResources().getAssets().open("test.txt");
            Reader in = new InputStreamReader(is);
            BufferedReader bufferedReader = new BufferedReader(in);
            String line = null;
            while (null != (line = bufferedReader.readLine()) ){
                System.out.println("assets file==========" + line);
            }
            bufferedReader.close();
            in.close();
            is.close();
           

由于assets下的檔案不會再R.java中生成相應的ID,是以Android提供了AssetManager的方法通路assets下的資源。

二、讀取raw目錄下的檔案(raw位于res目錄下,這個檔案需要手工建立)

is = getResources().openRawResource(R.raw.rawfile);
            in = new InputStreamReader(is);
            bufferedReader = new BufferedReader(in);
            line = null;
            while (null != (line = bufferedReader.readLine()) ){
                System.out.println("rawfile==========" + line);
            }
            bufferedReader.close();
            in.close();
            is.close();
           

三、讀寫工程内部檔案

FileOutputStream fileOutputStream = openFileOutput("projectfile.txt", Context.MODE_PRIVATE);
            OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write("ooooooooooooooooooo");
            bw.close();
            osw.close();
            fileOutputStream.close();

            FileInputStream fileInputStream = openFileInput("projectfile.txt");
            InputStreamReader isr = new InputStreamReader(fileInputStream);
            char[] input = new char[fileInputStream.available()];
            isr.read(input);
            isr.close();
            fileInputStream.close();
            String str = new String(input);
            System.out.println("project file=============" + str);
           

四、讀寫sdcard檔案

1、AndroidManifest.xml中添權重限控制

2、java操作代碼:

File file = Environment.getExternalStorageDirectory();//擷取sdcard路徑
if(file.exists()){//判斷是否存在sdcard
    System.out.println("sdcard file path========" + file.getAbsolutePath());
    File myfile = new File(file, "myfile_sdcard.txt");
    myfile.createNewFile();
    FileOutputStream fos = new FileOutputStream(myfile);
    fos.write("AAAAAAAAAAa".getBytes());
    fos.flush();
    fos.close();
}
//讀取sdcard檔案
File file1 = new File(file, "myfile_sdcard.txt");
InputStream inputStream = new FileInputStream(file1);
Reader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader1 = new BufferedReader(reader);
String iline = null;
while(null != (iline = bufferedReader1.readLine())){
    System.out.println("from sdcard myfile_sdcard.txt============" + iline);
}
bufferedReader1.close();
reader.close();
inputStream.close();
           

上述四種操作Android檔案的方式,各個處理方式都有所不同。

1、讀取assets目錄下的資源檔案時需要通過getResources().getAssets()方法擷取AssetManager的open方法來進行處理;

2、而讀取raw目錄下的資源檔案則通過getResources().openRawResource(R.raw.資源名稱)的方式來擷取;

3、讀寫工程其他目錄的檔案則通過openFileOutput和openFileInput來進行處理;

4、sdcard檔案的操作需要額外在AndroidManifest.xml中進行權限的聲明,并通過Environment.getExternalStorageDirectory()擷取sdcard的路徑,剩下的就是Java對檔案的操作了。