Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android 在內部存儲讀寫文件,android讀寫

Android 在內部存儲讀寫文件,android讀寫

編輯:關於android開發

Android 在內部存儲讀寫文件,android讀寫


文件讀寫操作
* Ram內存:運行內存,相當於電腦的內存
* Rom內存:內部存儲空間,相當於電腦的硬盤
* sd卡:外部存儲空間,相當於電腦的移動硬盤
在內部存儲空間中讀寫文件
>小案例:用戶輸入賬號密碼,勾選“記住賬號密碼”,點擊登錄按鈕,登錄的同時持久化保存賬號和密碼。界面如下:

1. 定義布局

代碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" 
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入賬號" />

    <EditText
        android:id="@+id/pass"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入密碼" />
    <CheckBox 
        android:id="@+id/cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="記住賬號和密碼"     
        />
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="登錄"
        />

</LinearLayout>

看著會不怎麼舒服,重新調整布局,代碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入賬號" />

    <EditText
        android:id="@+id/et_pass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入密碼"
        android:inputType="textPassword" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <CheckBox
            android:id="@+id/cb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="記住賬號和密碼" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:onClick="click"
            android:text="登錄" />
    </RelativeLayout>

</LinearLayout>

package com.wuyudong.rwinrom; import java.io.File; import java.io.FileOutputStream; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v) { // 獲取用戶輸入的賬號和密碼 EditText et_name = (EditText) findViewById(R.id.et_name); EditText et_pass = (EditText) findViewById(R.id.et_pass); String name = et_name.getText().toString(); String pass = et_pass.getText().toString(); // 獲取選框組件 CheckBox cb = (CheckBox) findViewById(R.id.cb); // 檢測選框是否被勾選 if (cb.isChecked()) { saveAccount(name, pass); } // 彈Toast提示框 Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show(); } public void saveAccount(String name, String pass) { File file = new File("data/data/com.wuyudong.rwinrom/info.txt"); try { FileOutputStream fos = new FileOutputStream(file); fos.write((name + "##" + pass).getBytes()); fos.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }

運行程序之前,內部存儲照中的文件夾如下

可以看到相關文件夾是空的

運行得到如下界面

點擊登錄按鈕,生成一個info.txt的文件

導出該文件到本地電腦

文件內容為:wuyudong##123456

4. 開啟io流把文件寫入內部存儲

* 直接開啟文件輸出流寫數據

//持久化保存數據
File file = new File("data/data/com.itheima.rwinrom/info.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write((name + "##" + pass).getBytes());
fos.close();
* 讀取數據前先檢測文件是否存在

if(file.exists())
* 讀取保存的數據,也是直接開文件輸入流讀取

File file = new File("data/data/com.itheima.rwinrom/info.txt");
FileInputStream fis = new FileInputStream(file);
//把字節流轉換成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String text = br.readLine();
String[] s = text.split("##");
* 讀取到數據之後,回顯至輸入框

et_name.setText(s[0]);
et_pass.setText(s[1]);
* 應用只能在自己的包名目錄下創建文件,不能到別人家去創建

最後的代碼如下:

package com.wuyudong.rwinrom;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    // File file = new File("data/data/com.wuyudong.rwinrom/info.txt");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadAccount();
    }

    public void click(View v) {
        // 獲取用戶輸入的賬號和密碼
        EditText et_name = (EditText) findViewById(R.id.et_name);
        EditText et_pass = (EditText) findViewById(R.id.et_pass);

        String name = et_name.getText().toString();
        String pass = et_pass.getText().toString();

        // 獲取選框組件
        CheckBox cb = (CheckBox) findViewById(R.id.cb);
        // 檢測選框是否被勾選
        if (cb.isChecked()) {
            saveAccount(name, pass);
        }
        // 彈Toast提示框
        Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();

    }

    public void saveAccount(String name, String pass) {
        File file = new File("data/data/com.wuyudong.rwinrom/info.txt");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write((name + "##" + pass).getBytes());
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void loadAccount() {
        File file = new File("data/data/com.wuyudong.rwinrom/info.txt");
        if (file.exists()) {
            try {
                FileInputStream fis = new FileInputStream(file);
                // 把字節流轉換為字節流
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        fis));
                String text = br.readLine();
                String[] s = text.split("##");
                // 獲取用戶輸入的賬號和密碼
                EditText et_name = (EditText) findViewById(R.id.et_name);
                EditText et_pass = (EditText) findViewById(R.id.et_pass);
                et_name.setText(s[0]);
                et_pass.setText(s[1]);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved