zoukankan      html  css  js  c++  java
  • android中的数据存取方式二:file(文件)

    在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>
    
    
  • 相关阅读:
    Docker 镜像
    为什么要用 Docker
    什么是 Docker
    python编码
    Python File(文件) 方法
    Python 日期和时间
    Python 字符串字典内置函数&方法
    Python 元组内置函数
    Epos消费管理系统使用发布订阅实现数据库SQL SERVER 2005同步复制
    Epos消费管理系统复制迁移SQL SERVER 2005数据库
  • 原文地址:https://www.cnblogs.com/linzheng/p/1942075.html
Copyright © 2011-2022 走看看