zoukankan      html  css  js  c++  java
  • 【Android】android文件的写入与读取---简单的文本读写context.openFileInput() context.openFileOutput()

    最终效果图,点击save会保存到文件中,点击show会从文件中读取出内容并显示。

    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="请您输入要保存的内容:"
        />
     <EditText
         android:id="@+id/addText"
         android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:hint="请您在此处输入文件内容!"
     />   
     <Button 
         android:id="@+id/addButton"
         android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
         android:text="save"
     />
     <Button
         android:id="@+id/showButton"
         android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="show"
     />
     <TextView
         android:id="@+id/showText"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        />
     
    </LinearLayout>

    activity代码

    package cn.com.file;
    
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    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;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class FileTest extends Activity {
        private EditText editText;
        private TextView showTextView;
        // 要保存的文件名
        private String fileName = "chenzheng_java.txt";
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // 获取页面中的组件
            editText = (EditText) findViewById(R.id.addText);
            showTextView = (TextView) findViewById(R.id.showText);
            Button addButton = (Button) this.findViewById(R.id.addButton);
            Button showButton = (Button) this.findViewById(R.id.showButton);
            // 绑定单击事件
            addButton.setOnClickListener(listener);
            showButton.setOnClickListener(listener);
    
        }
    
        // 声明监听器
        private View.OnClickListener listener = new OnClickListener() {
            public void onClick(View v) {
                Button view = (Button) v;
                switch (view.getId()) {
                case R.id.addButton:
                    save();
                    break;
                case R.id.showButton:
                    read();
                    break;
    
                }
    
            }
    
        };
    
        /**
         *@author chenzheng_Java 
         *保存用户输入的内容到文件
         */
        private void save() {
    
            String content = editText.getText().toString();
            try {
                /* 根据用户提供的文件名,以及文件的应用模式,打开一个输出流.文件不存系统会为你创建一个的,
                 * 至于为什么这个地方还有FileNotFoundException抛出,我也比较纳闷。在Context中是这样定义的
                 *   public abstract FileOutputStream openFileOutput(String name, int mode)
                 *   throws FileNotFoundException;
                 * openFileOutput(String name, int mode);
                 * 第一个参数,代表文件名称,注意这里的文件名称不能包括任何的/或者/这种分隔符,只能是文件名
                 *          该文件会被保存在/data/data/应用名称/files/chenzheng_java.txt
                 * 第二个参数,代表文件的操作模式
                 *             MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
                 *             MODE_APPEND  私有   重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件
                 *             MODE_WORLD_READABLE 公用  可读
                 *             MODE_WORLD_WRITEABLE 公用 可读写
                 *  */
                FileOutputStream outputStream = openFileOutput(fileName,
                        Activity.MODE_PRIVATE);
                outputStream.write(content.getBytes());
                outputStream.flush();
                outputStream.close();
                Toast.makeText(FileTest.this, "保存成功", Toast.LENGTH_LONG).show();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * @author chenzheng_java 
         * 读取刚才用户保存的内容
         */
        private void read() {
            try {
                FileInputStream inputStream = this.openFileInput(fileName);
                byte[] bytes = new byte[1024];
                ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
                while (inputStream.read(bytes) != -1) {
                    arrayOutputStream.write(bytes, 0, bytes.length);
                }
                inputStream.close();
                arrayOutputStream.close();
                String content = new String(arrayOutputStream.toByteArray());
                showTextView.setText(content);
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    }

    其他的都为默认。

    关于文件保存的路径可以通过ADT携带的File Explorer工具进行查看。如何调出File Explorer工具呢;我们可以通过Windows--showView--others-android下面看到File Explorer。这里是我的一个截图。

    对于这个程序,基本上没什么难点,就是纯粹的java流知识。唯一不同的就是context为我们提供了两个方法来获取输入输出流。简单、方便、快捷啊。

    文章转载,版权归原作者所有,尊重版权,支持原创

  • 相关阅读:
    从错误状态恢复虚拟机
    OpenStack手动从数据库中删除实例
    对于flat_interface与public_interface的理解
    2. 拓扑图
    Cinder相关命令收集
    Nova相关命令收集
    14. Launch an instance
    9. Add the Block Storage service
    8. Add the dashboard
    7. Add a networking service
  • 原文地址:https://www.cnblogs.com/rayray/p/3408097.html
Copyright © 2011-2022 走看看