内存储与外存储(IO流的应用)

存储分为内存储,外存储(Sd卡存储),其中还涉及IO流的应用。

我们先来看内存储,在布局中EditView中输入的内容,通过点击按钮,分别进行保存,读取,删除的操作,读取时显示在下面的TextView中。

布局如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"    tools:context="com.example.administrator.jreduch07.InnerIoActivity">   <EditText       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:hint="请输入内容"       android:id="@+id/content"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"          android:text="保存"        android:id="@+id/save"        android:layout_below="@+id/content"        android:layout_centerHorizontal="true" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="读取"        android:id="@+id/read"        android:layout_below="@+id/content"        android:layout_alignParentStart="true" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="删除"        android:id="@+id/delete"        android:layout_below="@+id/content"        android:layout_alignParentEnd="true" />    <TextView        android:layout_width="match_parent"        android:layout_height="100dp"        android:id="@+id/tv"        android:layout_below="@+id/save"        android:layout_alignParentStart="true" /></RelativeLayout>

Activity代码如下:
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;

import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;

public class InnerIoActivity extends AppCompatActivity {    private EditText content;    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_inner_io);        Button save= (Button) findViewById(R.id.save);       Button read= (Button) findViewById(R.id.read);       final Button delete= (Button) findViewById(R.id.delete);        tv= (TextView) findViewById(R.id.tv);        content= (EditText) findViewById(R.id.content);        save.setOnClickListener(new View.OnClickListener() {     //保存的点击事件            @Override            public void onClick(View v) {                saveFile();            }        });        read.setOnClickListener(new View.OnClickListener() {    //读取的点击事件            @Override            public void onClick(View v) {            tv.setText(readFile());            }        });        delete.setOnClickListener(new View.OnClickListener() {  //删除的点击事件            @Override            public void onClick(View v) {                Log.d("==","********");                removeFile();            }        });    }

    public void removeFile(){                                      //删除的方法        String[] files=fileList();        for(String str:files){           if(str.equals("text.txt")){                deleteFile("text.txt");                break;            }

        }    }

    public String readFile(){                                     //从内存储中读取文件的方法
        BufferedReader reader=null;
        FileInputStream fis=null;        StringBuilder sbd=new StringBuilder();        try {            fis=openFileInput("text.txt");                       //打开名为text.txt的文件                reader=new BufferedReader(new InputStreamReader(fis));            String row ="";            sbd.append(getFilesDir().getCanonicalPath());            while( (row=reader.readLine()) !=null){                sbd.append(row);            }        } catch (FileNotFoundException e) {            Toast.makeText(getBaseContext(),"文件不存在",Toast.LENGTH_SHORT).show();            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        finally {            if(reader!=null){                try {                    reader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return sbd.toString();    }

                                            //保存文件到内存储的方法    public void saveFile(){        FileOutputStream fos=null;        try {            /*openFileOutput 返回一个 输出字节流               指向的路径为 data/data/包名/files/               参数1:文件名称(如果不存在则自动创建)               参数2:模式MODE_APPEND 文件内容可追加                      模式MODE_PRIVATE 文件内容被覆盖             */            fos= openFileOutput("text.txt",MODE_APPEND);            String str=content.getText().toString();            fos.write(str.getBytes());            Toast.makeText(getBaseContext(),"保存成功",Toast.LENGTH_SHORT).show();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            if(fos!=null){                try {                    fos.flush();                    fos.close();                } catch (IOException e) {                    e.printStackTrace();                }            }

        }    }}

外存储即为Sd卡存储,布局与内存储的相同,只是存储的方法不同而已。
import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;

public class SaveToSdCardActivity extends AppCompatActivity {    private Button save,read,delete;    private EditText content;    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_inner_io);        save= (Button) findViewById(R.id.save);        read= (Button) findViewById(R.id.read);        tv= (TextView) findViewById(R.id.tv);        content= (EditText) findViewById(R.id.content);        delete= (Button) findViewById(R.id.delete);        save.setOnClickListener(new View.OnClickListener() {   //保存的点击事件            @Override            public void onClick(View v) {                saveFile();            }        });        read.setOnClickListener(new View.OnClickListener() {         //读取的点击事件            @Override            public void onClick(View v) {                tv.setText(readFile());            }        });        delete.setOnClickListener(new View.OnClickListener() {      //删除的点击事件            @Override             public void onClick(View v) {               removeFile();

            }        });    }

    //保存文件到SD卡    public void saveFile(){                                                 FileOutputStream fos=null;                                                                     //获取sd状态        String state = Environment.getExternalStorageState();                                                                      //判断sd卡是否就绪,只要涉及到Sd卡的方法,就要判断SD卡是否就绪        if(!state.equals(Environment.MEDIA_MOUNTED)){            Toast.makeText(this,"请检查sd卡",Toast.LENGTH_SHORT).show();            return;        }                                                                //取得SD卡根目录        File file=Environment.getExternalStorageDirectory();        try {
            //File myFile=new File(file.getCanonicalPath()+"/sd.txt",true);     //两种不同的方式
            /*            输出流的构造参数1:可以是   File 对象,也可以是文件路径            输出流的构造参数2:默认为   false  =》覆盖内容; true =》追加内容             */            fos=new FileOutputStream(file.getCanonicalPath()+"/sd.txt",true);            String str= content.getText().toString();            fos.write(str.getBytes());            Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();

        } catch (IOException e) {            e.printStackTrace();        }finally {            if(fos!=null){                try {                    fos.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

    //从SD卡读取文件    public String readFile(){        BufferedReader reader=null;        FileInputStream fis=null;        StringBuilder sbd=new StringBuilder();        String statu=Environment.getExternalStorageState();        if(!statu.equals(Environment.MEDIA_MOUNTED)){            Toast.makeText(this,"SD卡未就绪",Toast.LENGTH_SHORT).show();            return "";        }         File root=Environment.getExternalStorageDirectory();        try {            fis=new FileInputStream(root+"/sd.txt");            reader=new BufferedReader(new InputStreamReader(fis));            String row="";            while((row=reader.readLine())!=null){                sbd.append(row);            }        } catch (FileNotFoundException e) {            Toast.makeText(this,"文件不存在",Toast.LENGTH_SHORT).show();         //   e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            if(reader!=null){                try {                    reader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return sbd.toString();    }    //删除SD卡文件    public void removeFile(){        String state= Environment.getExternalStorageState();        //判断sd卡是否就绪        if(!state.equals(Environment.MEDIA_MOUNTED)){            Toast.makeText(this,"请检查sd卡",Toast.LENGTH_SHORT).show();            return;        }        File file=Environment.getExternalStorageDirectory();        File myFile = new File(file+"/sd.txt");        if (myFile.exists()){            myFile.delete();            Toast.makeText(this,"文件已删除",Toast.LENGTH_SHORT).show();        }else {            Toast.makeText(this,"文件不存在",Toast.LENGTH_SHORT).show();        }    }

}
 


时间: 2024-10-10 10:20:54

内存储与外存储(IO流的应用)的相关文章

Android中的内存储、外存储概念、文件操作与PC端的有些不同

其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.初学者在这部分感到很容易混淆内部存储和外部存储两个概念. 相对路径和绝对路径 在java中,关于相对路径和绝对路径是这样解释的. 绝对路径是指书写文件的完整路径,例如d:\java\Hello.java,该路径中包含文件的完整路径d:\java以及文件的全名Hello.java.使用该路径可以唯一的找到一个文件,不会产生歧义

io流新闻管理系统实例(简单型)

1.新闻集合的使用+文件流的应用2.文件流序列化与反序列化对象的使用 一.创建新闻类 1 package com.news.entity; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 6 /** 7 * 新闻实体类 8 * @author Direct 9 * 10 */ 11 public class NewsInfo implements Serializable{ 12 /** 13 * 14 */ 15 priv

【Android】数据存储-java IO流文件存储

1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.SharedPreference 存储以及数据库存储. 1.文件存储 :不对数据作任何处理,将数据原封不动地存储到文件中,适合存储一些简单的文本数据和二进制数据. a.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据存储到文件中.这个方法接收两个参数,第

13.序列化和IO流(存储恢复)

1.序列化 对象序列化 用来存储对象的状态. 将被序列化的对象写到文件中,然后可以让你的程序去文件中读取序列化的对象并把他们展开回到活生生的状态. 当对象被序列化时,该对象引用的实例变量也被序列化,且所有被引用的对象也被序列化. 如果要让类能够被序列化,实现Serializable,此接口没有任何方法需要实现,唯一目的就是是声明有实现它的类是可以被序列化. objectOutputStream.writeObject(myBox) 任何放在此处的对象都必须实现序列化,否则执行期一定会出问题. 步

ubuntu14.04禁用USB外存储设备

ubuntu 14.04中禁用usb外存储设备: 在网上找了很多方法,大概都是下面的命令,而实际测试的时候没有什么作用. gsettings set org.gnome.desktop.media-handling automount "false" 禁用u盘自动挂载 gsettings set org.gnome.desktop.media-handling automount-open "false" 禁用u盘自动打开 下面这种方法实测可行: sudo vi /

5. IO流:★★★★★

IO流:★★★★★,用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节流和字符流. 字节流:处理字节数据的流对象.设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的.二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节.意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据. 那么为什么要有字符流呢?因

黑马程序员——IO流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- IO流 IO流概述 IO流用来处理设备之间的数据传输.Java对数据的操作是通过流的方式.Java用于操作流的对象都在IO包中. 流按照流向分为两种:输入流和输出流. 输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入.将内存的数写入到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字.再对这个文字

学习笔记-java IO流总结 转载

1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读写数据的标准方法.任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法. Java.io是大多数面向数据流的输入/输出类的主要软件包.此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO. 流IO的好处是简单易用,缺点是效率较低.块IO效率很高,但编程比较

Android--数据持久化之内部存储、Sdcard存储

前言 之前一直在讲AndroidUI的内容,但是还没有完结,之后会慢慢补充.今天讲讲其他的,关于数据持久化的内容.对于一个应用程序而言,不可避免的要能够对数据进行存储,Android程序也不例外.而在Android中,提供了几种实现数据持久化的方法.后面会分别介绍. 在Android中,可以使用几种方式实现数据持久化: Shared Preferences:共享参数形式,一种以Key-Value的键值对形式保存数据的方式,Android内置的,一般应用的配置信息,推荐使用此种方式保存. Inte