日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android文件存储数组,Android面试简录——文件存储

發(fā)布時間:2025/3/20 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android文件存储数组,Android面试简录——文件存储 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

* SharedPreferences

請描述Android SDK支持哪些文件存儲技術?

1.SharedPreferences保存key-value類型的數(shù)據(jù)

2.流文件存儲(openFileOutput/openFileInput或FileInputStream/FileOutputStream)

3.XML半結構化存儲

4.用JSON保存數(shù)組和對象

5.用數(shù)據(jù)庫保存結構化數(shù)據(jù)

6.用第三方的面向對象數(shù)據(jù)庫直接保存Java對象

如何使用SharedPreferences存取key-value類型的數(shù)據(jù)?

1.Context.getSharedPreferences(參數(shù)1:存儲key-value的文件名稱,...) -> SharedPreferences對象

2.SharedPreferences.edit -> SharedPreferences.Editor對象

3.SharedPreferences.Editor.putXxx() -> 保存key-value對

4.SharedPreferences.Editor.commit -> 提交key-value對

從survey.xml文件中讀取key-value對:

String PREFERENCE_NAME = "survey";

SharedPreferences sharedPreferences = getSharedPreferences(

PREFERENCE_NAME, Activity.MODE_PRIVATE);

etName.setText(sharedPreferences.getString("name", ""));

etHabit.setText(sharedPreferences.getString("habit", ""));

cbEompanyType.check(sharedPreferences.getInt("companyTypeId", ""));

cbEmployee.setChecked(sharedPreferences.getBoolean("employee", false));

rgCompanyType.check(sharedPreferences.getInt("companyTypeId", -1));

向survey.xml文件中寫入key-value對:

SharedPreferences mySharedPreferences = getSharedPreferences(

PREFERENCE_NAME, Activity.MODE_PRIVATE);

SharedPreferences.Editor editor = mySharedPreferences.edit();

editor.putString("name", "bill");

editor.putString("habit", "swimming");

editor.putBoolean("employee", true);

editor.putInt("companyTypeId", 1);

editor.edit();

用SharedPreferences保存的數(shù)據(jù)文件放在哪個目錄中?怎樣不使用SharePreferences訪問這些文件?

存儲路徑:/data/data/packagename/shared_prefs.

只能使用文件流讀寫SharedPreferences數(shù)據(jù)文件。

String path = android.os.Environment.getDataDirectory().getAboslutePath()

+ "/data/" + getPackageName() + "/shared_prefs/abc.xml";

try {

BufferedReader br = new BufferedReader(

new InputStreamReader(

new FileInputStream(path)));

Toast.makeText(this, br.readLine(), Toast.LENGTH_LONG);

fis.close();

} catch (Exception e) {

}

SharedPreferences怎樣把數(shù)據(jù)文件存儲到sd卡上?

SharedPreference原則上只能保存在當前應用程序私有的shared_prefs目錄中,不過可以利用反射技術改變系統(tǒng)內定的文件保存路徑。

try {

Field field = ContextWrapper.class.getDeclaredField("mBase");

field.setAccessible(true);

Object obj = field.get(this);

field = obj.getClass().getDeclaredField("mPreferencesDir");

field.setAccessible(true);

File file = new File("/sdcard/");

field.set(obj, file);

SharedPreferences mySharedPreferences = getSharedPreferences("config", Activity.MODE_PRIVATE);

SharedPreferences.Editor editor = mySharedPreferences.edit();

editor.putString("name", "nancy");

editor.commit();

} catch (Exception e) { }

SharedPreferences文件可以保存圖像數(shù)據(jù)嗎?

將圖像轉換成字符串再保存。采用Base64將二進制數(shù)據(jù)轉換成字符串的編碼。

SharedPreferences sharedPreferences = getSharedPreferences("base64", Activity.MODE_PRIVATE);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

((BitmapDrawable) imageView.getDrawable()).getBitmap().compress(CompressFormat.JPEG, 50, baos);

String imageBase64 = new String(Base64.encodeBase64(baos.toByteArray()));

SharedPreferences.Editor editor = SharedPreferences.edit();

editor.putString("productImage", imageBase64);

editor.commit();

讀取:

String imageBase64 = sharedPreferences.getString("productImage", "");

base64Bytes = Base64.decodeBase64(imageBase64.getBytes());

bais = new ByteArrayInputStream(base64Bytes);

imageView.setImageDrawable(Drawable.createFromStream(bais, "product_image"));

【拓展】在SharedPreferences中存取可序列化對象。

序列化對象類:

public class Product implements Serializable {

private String name;

private String id;

private String price;

//...

}

保存:

Product product = new Product();

product.setId(1234);

product.setName("nancy");

product.setPrice("9999");

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(baos);

oos.setObject(product);

SharedPreferences sharedPreferences = getSharedPreferences("Product", Activity.MODE_PRIVATE);

SharedPreferences.Editor editor = sharedPreferences.edit();

String productBase64 = new String(Base64.encodeBase64(baos.toByteArray()));

editor.putString("product", productBase64);

editor.commit();

讀取:

String productBase64 = sharedPreferences.getString("product", "");

byte[] base64Bytes = Base64.decodeBase64(productBase64.getBytes());

ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);

ObjectInputStream ois = new ObjectInputStream(bais);

Product product = (Product) ois.readObject();

如何通過PreferenceActivity類實現(xiàn)一個設置頁面?

通過xml配置文件來描述設置界面的設置項,系統(tǒng)會自動保存當前設置項的最后狀態(tài)。

常用設置項:

1.CheckBoxPreference:創(chuàng)建CheckBox標簽

2.EditTextPreference:彈出帶EditText的對話框

3.ListPreference:彈出帶ListView的對話框

res/xml目錄下的preference_setting文件:

android:title="使用無線網(wǎng)絡"

android:summary="使用無線網(wǎng)絡查看應用程序的位置" />

android:title="啟用衛(wèi)星定位"

android:summary="定位時,精確到街道級別" />

android:title="是否保存?zhèn)€人信息" />

android:title="姓名"

android:summary="請輸入真實姓名" />

android:title="其他信息"

android:summary="是否工作、手機" >

android:title="手機"

android:summary="請輸入真實的手機號" />

android:title="是否工作" />

配置:

addPreferencesFromResource(R.xml.preference_setting);

【拓展】使用PreferenceActivity預定義組件布局界面應注意什么?

1.一個設置界面對應一個標簽

2.表示一個設置分類,title屬性表示分類名稱

3.設置項標簽可以不屬于任何設置分類

4.嵌套,說明該設置頁有一個子設置頁

5.android:key屬性的值是保存在XML文件中的key-value的key

6.android:title,android:summary表示設置項的標題和摘要

請說出PreferenceActivity保存數(shù)據(jù)文件的路徑,文件的命名規(guī)則,默認的文件名是否可以更改。

默認保存路徑:shared_prefs目錄

默認文件名:packagename_preferences.xml

如果當前窗口屬于net.blogjava.mobile包,則默認文件名為net.blogjava.mobile_packagename_preferences.xml

修改默認的文件名:PreferenceManager.setSharedPreferencesName:

getPreferenceManager().setSharedPreferencesName("setting");

用PreferenceActivity實現(xiàn)一個設置界面,如果某一個設置項的復選框變化后要求設置另一個列表項的狀態(tài),應該如何做呢?

覆蓋PreferenceActivity.onPreferenceTreeClick方法:

public boolean onPreferenceTreeOnClick(PreferenceScreen preferenceScreen, Preference preference) {

if ("yesno_save_individual_info".equals(preference.getKey())) {

findPreference("individual_name").setEnabled(

!findPreference("individual_name").isEnabled());

}

return super.onPreferenceTreeOnClick(preferenceScreen, Preference);

}

* 流文件

Android SDK支持哪些獲取文件輸入輸出流的方式?

1.直接創(chuàng)建FileInputStream和FileOutputStream對象

try {

FileOutputStream fos = new FileOutputStream("/sdcard/record.txt");

//寫入內容

fos.close();

FileInputStream fis = new FileInputStream("/sdcard/record.txt");

//讀取內容

fis.close();

} catch (Exception e) { }

2.使用Context.openFileOutput/Context.openFileInput方法

try {

OutputStream os = openFileOutput("file.txt", Activity.MODE_PRIVATE);

//寫入內容

os.close();

InputStream is = openFileInput("file.txt");

is.close();

} catch(Exception e) { }

請說出Context.openFileOutput方法存儲數(shù)據(jù)文件的路徑

/data/data//files

如何使用ImageView組件裝載SD卡上的圖像文件?

ImageView imageView = (ImageView) findViewById(R.id.imageView);

imageView.setImageDrawable(Drawable.createFromPath("/sdcard/face.png"));

XML存儲

Android SDK支持讀取XML嗎?

只支持采用SAX技術讀取XML。

請描述SAX分析XML文檔的過程

SAX引擎需要處理5個分析點(分析事件):

1.開始分析XML文件。DefaultHandler.startDocument,初始化工作。

2.開始處理每一個XML元素。startElement,獲得當前元素的名稱、元素屬性的相關信息。

3.處理完一個XML元素。endElement,獲得當前處理完的元素的全部信息。

4.處理完XML文件。endDocument,非必需方法,收尾工作(釋放資源等)。

*6.讀取字符分析點。最重要。保存SAX引擎讀取的XML文件內容,就是保存XML元素的文本。

將XML文件轉換成對象。

xml文件示例:

10

電腦

2067.25

20

微波爐

520

List對象

package net.blogjava.mobile;

public class Product

{

private int id;

private String name;

private float price;

//...getter and setter

}

XML2Product類負責具體的轉換工作:

package net.blogjava.mobile;

import java.util.ArrayList;

import java.util.net;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class XML2Product extenda DefaultHandler

{

private List products;

private Product product;

private StringBuffer buffer = new StringBuffer();

public List getProducts()

{

return products;

}

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException

{

//將SAX引擎掃描到的內容保存在buffer變量中,并為endElement提供參數(shù)

buffer.append(ch, start, length);

super.characters(ch, start, length);

}

@Override

public void endElement(String uri, String localName, String gName) throws SAXException

{

//SAX每分析完一個XML元素,將該元素的文本保存在Product對象的相應屬性中

super.endElement(uri, localName, gName);

}

@Override

public void sartDocument() throws SAXException

{

//創(chuàng)建用于保存轉換結果的List對象

products = new ArrayList();

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes) thows SAXException

{

//SAX引擎分析到每一個結點時,創(chuàng)建一個Product對象

super.startElement(uri, localName, qName, attributes);

}

補充endElement和startElement中的代碼。

@Override

public void endElement(String uri, String localName, String gName) throws SAXException

{

if (localName.equals("product"))

{

products.add(product);

}

else if (localName.equals("id"))

{

product.setId(Integer.parseInt(buffer.toString().trim()));

buffer.setLength(0);

}

else if (localName.equals("name"))

{

product.setName(buffer.toString().trim());

buffer.setLength(0);

}

else if (localName.equals("price"))

{

product.setPrice(Float.parseFloat(buffer.toString().trim()));

buffer.setLength(0);

}

super.endElement(uri, localName, gName);

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes) thows SAXException

{

if (localName.equals("product"))

{

product = new Product();

}

super.startElement(uri, localName, qName, attributes);

}

寫出利用XML2Product類將products.xml文件的內容轉換成List對象的Java代碼。

FileInputStream fis = new FileInputStream("/sdcard/products.xml");

XML2Product xml2Product = new XML2Product();

android.util.Xml.parse(fis, Xml.Encoding.UTF_8, xml2Product);

List products = xml2Product.getProducts();

JSON存儲

請描述JSON文檔的格式

使用字符串形式保存數(shù)組和對象屬性值。

數(shù)組使用'[]',對象使用'{}'。

請解析JSON格式文檔的Java代碼,并輸出到LogCat視圖中。

[{'name':'地球', 'satellite_count':'1', 'satellite_names':'moon'},{'name':'火星', 'satellite_count':'2', 'satellite_names':'Phobos, Deimos'}]

try

{

String json = "[{'name':'地球', 'satellite_count':'1', 'satellite_names':'moon'},{'name':'火星', 'satellite_count':'2', 'satellite_names':'Phobos, Deimos'}]";

JSONArray jsonArray = new JSONArray(json);

for (int i = 0; i < jsonArray.length(); i ++)

{

String s = String.valueOf(jsonArray.get(i));

JSONObject jsonObject = new JSONObject(s);

Log.d("name", String.valueOf(jsonObject.get("name")));

Log.d("satellite_count", String.valueOf(jsonObject.get("satellite_count")));

if (jsonObject.has("satellite_names"))

{

Log.d("satellite_names", String.valueOf(jsonObject.get("satellite_names")));

}

}

}

catch (Exception e)

{

}

總結

以上是生活随笔為你收集整理的android文件存储数组,Android面试简录——文件存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。