android中的資料存取-方式二:file(檔案)

來源:互聯網
上載者:User

在Android系統中,這些檔案儲存在 /data/data/PACKAGE_NAME/files 目錄下。

資料讀取

public static String read(Context context, String file) {String data = "";try {FileInputStream stream = context.openFileInput(file);StringBuffer sb = new StringBuffer();int c;while ((c = stream.read()) != -1) {sb.append((char) c);}stream.close();data = sb.toString();} catch (FileNotFoundException e) {} catch (IOException e) {}return data;}

從代碼上,看起來唯一的不同就是檔案的開啟檔案了: context.openFileInput(file); Android中的檔案讀寫具有許可權控制,所以使用context(Activity的父類)來開啟檔案,檔案在相同的Package中共用。這裡的 Package的概念同Preferences中所述的Package,不同於Java中的Package。

資料寫入

public static void write(Context context, String file, String msg) {try {FileOutputStream stream = context.openFileOutput(file,Context.MODE_WORLD_WRITEABLE);stream.write(msg.getBytes());stream.flush();stream.close();} catch (FileNotFoundException e) {} catch (IOException e) {}}

在這裡開啟檔案的時候,聲明了檔案開啟的方式。

一般來說,直接使用檔案可能不太好用,尤其是,我們想要存放一些瑣碎的資料,那麼要產生一些瑣碎的檔案,或者在同一檔案中定義一下格式。其實也可以將其封裝成Properties來使用:

public static Properties load(Context context, String file) {Properties properties = new Properties();try {FileInputStream stream = context.openFileInput(file);properties.load(stream);} catch (FileNotFoundException e) {} catch (IOException e) {}return properties;}public static void store(Context context, String file, Properties properties) {try {FileOutputStream stream = context.openFileOutput(file,Context.MODE_WORLD_WRITEABLE);properties.store(stream, "");} catch (FileNotFoundException e) {} catch (IOException e) {}}

/Chapter09_Data_02/src/com/amaker/test/MainActivity.java
代碼
package com.amaker.test;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
private static final String FILE_NAME="temp.txt";
private Button b1,b2;
private EditText et1,et2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b1 = (Button)findViewById(R.id.Button01);
b2 = (Button)findViewById(R.id.Button02);

et1 = (EditText)findViewById(R.id.EditText01);
et2 = (EditText)findViewById(R.id.EditText02);

b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
write(et1.getText().toString());
}
});

b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
et2.setText(read());
}
});
}

private String read(){
try {
FileInputStream fis = openFileInput(FILE_NAME);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
return new String(buffer);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

private void write(String content){
try {
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
fos.write(content.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

 

/Chapter09_Data_02/res/layout/main.xml

代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="File Test" />

<EditText android:text="" android:id="@+id/EditText01"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="100px"></EditText>

<Button android:id="@+id/Button01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Write"></Button>

<EditText android:text="" android:id="@+id/EditText02"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="100px"></EditText>

<Button android:id="@+id/Button02" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Read"></Button>

</LinearLayout>

 

/Chapter09_Data_02/AndroidManifest.xml

代碼
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.amaker.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>
<uses-sdk android:minSdkVersion="3" />

</manifest>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.