close

以下紀錄Android存取文件的方式,我們的目標為建立一個可以寫入檔案與並且把內容顯示在介面上的APP

1.jpg

 

總共有9個物件,分別是3Button4TextView2EditText,程式碼如下,須放在activity_main.xml

輸入帳號欄位 (TextView + EditText):

2.jpg

 

輸入密碼欄位 (TextView + EditText):

3.jpg

 

三個按鈕分別為:

4.jpg

 

顯示視窗:

5.jpg

 

主程式碼如下(MainActivity.java)

主要存取是使用 FileInputStream FileOutputStream 搭配 BufferedInputStream BufferedOutputStream

public class MainActivity extends AppCompatActivity {
    private EditText account,pwd;
    private TextView tv;
    private Button add,clear,end;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        account = (EditText)findViewById(R.id.inputAccount);
        pwd = (EditText)findViewById(R.id.inputPwd);
        tv = (TextView)findViewById(R.id.show);
        add = (Button)findViewById(R.id.addBtn);
        clear = (Button)findViewById(R.id.clearBtn);
        end = (Button)findViewById(R.id.endBtn);
        add.setOnClickListener(listener);
        clear.setOnClickListener(listener);
        end.setOnClickListener(listener);
    }

    private Button.OnClickListener listener = new Button.OnClickListener(){
        @Override
        public void onClick(View v) {
            switch(v.getId()){
                case R.id.addBtn:
                    if(account.getText().toString().equals("")||pwd.getText().toString().equals("")){
                        Toast toast = Toast.makeText(getApplicationContext(),"請輸入帳號密碼",Toast.LENGTH_LONG);
                        break;
                    }
                    FileOutputStream file = null;
                    try {
                        file = openFileOutput("test.txt", MODE_APPEND);
                        BufferedOutputStream inputStream = new BufferedOutputStream(file);
                        inputStream.write(account.getText().toString().getBytes());
                        inputStream.write("\n".getBytes());
                        inputStream.write(pwd.getText().toString().getBytes());
                        inputStream.write("\n".getBytes());
                        inputStream.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    readFile();
                    account.setText("");
                    pwd.setText("");
                    break;
                case R.id.clearBtn:
                    try {
                        file = openFileOutput("test.txt", MODE_PRIVATE);
                        file.close();
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                    readFile();
                    break;

                case R.id.endBtn:
                    finish();
                    break;
            }
        }
    };

    private void readFile(){
        FileInputStream file = null;
        try {
            file = openFileInput("test.txt");
            BufferedInputStream inputStream = new BufferedInputStream(file);
            byte [] str = new byte[20];
            tv.setText("");
            do {
                int length = inputStream.read(str);
                if(length==-1){
                    break;
                } else {
                    tv.append(new String(str));
                }
            }while(true);
            inputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

結果:

6.jpg

arrow
arrow
    全站熱搜

    葛瑞斯肯 發表在 痞客邦 留言(0) 人氣()