zoukankan      html  css  js  c++  java
  • Android学习笔记_5_文件操作

      1、Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。

    package com.example.service;
    
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import android.content.Context;
    
    public class FileService {
        /**
         * 上下文对象
         */
        private Context context;
    
        public FileService(Context context) {
            super();
            this.context = context;
        }
        
        /**
         * 保存文件
         * @param filename 文件名称
         * @param content 文件内容
         * @throws Exception
         */
        public void save(String filename,String content) throws Exception{
            //私有操作模式:创建出来的文件只能被本应用访问,其他应用无法访问,另外采用私有模式创建的文件,写入的内容会覆盖原内容。
            //私有操作特点:1、其他应用无法访问;2、内容会覆盖原内容。
            FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
            fos.write(content.getBytes());
            fos.close();
        }
        
        /**
         * 读取文件内容
         * @param filename 文件名称
         * @return
         * @throws Exception
         */
        public String read(String filename) throws Exception{
            FileInputStream fis=context.openFileInput(filename);
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int len=0;
            while((len=fis.read(buf))!=-1){
                //把读取的数据写入到内存中
                outputStream.write(buf,0,len);
            }
            outputStream.close();
            fis.close();
            byte[] data = outputStream.toByteArray();        
            return new String(data);
        }
    }

      2、查看文件和四种操作模式:

        openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存  在/data/data/<package name>/files目录,如: /data/data/com.example.service/files/1.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。

      openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:

      Context.MODE_PRIVATE    =  0  

      Context.MODE_APPEND    =  32768

      Context.MODE_WORLD_READABLE =  1

      Context.MODE_WORLD_WRITEABLE =  2

      Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND

      Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

      Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

      MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

      MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

      如果希望文件被其他应用读和写,可以传入:openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

    android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。

      3、读取文件:

        如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法或者直接使用文件的绝对路径:

      File file = new File("/data/data/com.example.service/files/itcast.txt");
    
      FileInputStream inStream = new FileInputStream(file);
    
      Log.i("FileTest", readInStream(inStream));
    
      //注意:上面文件路径中的“com.example.service”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。

      4、获取目录

        Activity还提供了getCacheDir()和getFilesDir()方法:

        getCacheDir()方法用于获取/data/data/<package name>/cache目录

        getFilesDir()方法用于获取/data/data/<package name>/files目录

      5、Activity类读取文件代码:

    package com.example.fileoperator;
    
    import com.example.service.FileService;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    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 MainActivity extends Activity {
    
        private EditText filename;
        private EditText filecontent;
        private Button btnSave;
        private Button btnRead;
        private TextView tvContent;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            filename = (EditText) this.findViewById(R.id.filename);
            filecontent = (EditText) this.findViewById(R.id.filecontent);
            tvContent=(TextView)this.findViewById(R.id.readFileContent);
            tvContent.setText("");
            btnSave = (Button) this.findViewById(R.id.btnSave);
            
            //保存文件
            btnSave.setOnClickListener(new OnClickListener() {        
                @Override
                public void onClick(View arg0) {
                    String nameString = filename.getText().toString();
                    String contentString=filecontent.getText().toString();
                    FileService fs = new FileService(MainActivity.this);
                    try {
                        fs.save(nameString, contentString);
                        Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(MainActivity.this, R.string.fail, Toast.LENGTH_LONG).show();
                    }
                }
            });
            //读取文件内容
            btnRead = (Button) this.findViewById(R.id.btnRead);
            btnRead.setOnClickListener(new OnClickListener() {    
                @Override
                public void onClick(View arg0) {
                    String nameString = filename.getText().toString();
                    FileService fs = new FileService(MainActivity.this);
                    try {
                        String content =fs.read(nameString);
                        tvContent.setText(content);
                    } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(MainActivity.this,"读取失败", Toast.LENGTH_LONG).show();
                    }
                }
            });
            
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {    
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
    View Code
  • 相关阅读:
    hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7
    hadoop(四)centos7克隆|静态ip|机器名|映射关系|别名配置(完全分布式准备一)|6
    大数据及hadoop简要概念
    hadoop(三)伪分布模式hdfs文件处理|5
    Hadoop(二) 单节点案例grep和wordcount|4
    centos7 ip/映射/机器名变更/克隆(克隆后配置修改)|2
    centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1
    Hadoop(一) centos7 jdk安装,hadoop安装|3
    hive常用函数五
    hive常用函数四
  • 原文地址:https://www.cnblogs.com/lbangel/p/3405046.html
Copyright © 2011-2022 走看看