灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:9572回复:0

android学习笔记9--------------SD卡读写文件

楼主#
更多 发布于:2012-09-06 13:44


把文件存入SD卡中
首先加入读写权限
SD卡创建与删除文件权限
<uses-permission Android:name="Android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
SD卡写入数据权限
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>



点击保存前:




点击保存:






SD卡根目录多了123.txt文件




点击读取:





读取成功。
代码:

[java]
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import Android.app.Activity;
import Android.os.Bundle;
import Android.os.Environment;
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;

import com.luku.file.service.FileService;

public class fileActivity extends Activity
{
    private EditText editText=null;
    private Button   button =null;
    private TextView content =null;
    private Button   read=null;
    private TextView textView1=null;
    private Button   exit=null;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        textView1=(TextView)findViewById(R.id.textView1);
        content=(TextView)findViewById(R.id.content);
        editText=(EditText)findViewById(R.id.filename);
        button=(Button)findViewById(R.id.baocun);
        read=(Button)findViewById(R.id.read);
        exit=(Button)findViewById(R.id.exit);
        
        button.setOnClickListener(listener);
        read.setOnClickListener(listener);      
        exit.setOnClickListener(listener);
    }
    
    private OnClickListener listener=new OnClickListener()
    {
        int resId = R.string.success;
        @Override
        public void onClick(View v)
        {
            Button btn=(Button)v;            
            File file=new File(Environment.getExternalStorageDirectory(),//得到SD卡根目录  
                    editText.getText().toString());                      //保存文件的文件名  
            
            switch (btn.getId())
            {
                case R.id.baocun:
                if(Environment.getExternalStorageState().
                        equals(Environment.MEDIA_MOUNTED)) //判断SD卡是否存在,并且可以可以读写  
                {        
                    try
                    {
                        FileOutputStream stream=new FileOutputStream(file);
                        FileService.save(stream, content.getText().toString());
                    }  
                    catch (IOException e)
                    {
                        e.printStackTrace();
                        resId = R.string.error;
                        Toast.makeText(fileActivity.this, resId, Toast.LENGTH_LONG).show();
                    }            
                    Toast.makeText(fileActivity.this, resId, Toast.LENGTH_LONG).show();
                }
                else  
                {
                    Toast.makeText(fileActivity.this, "SD卡不存在或写保护", Toast.LENGTH_LONG).show();
                }
                    break;
                    
                case R.id.read:
                    try
                    {
                        InputStream instream=new FileInputStream(file);
                        String string=FileService.read(instream);
                        System.out.println(string);
                        textView1.setText(string.toString());
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                        Toast.makeText(fileActivity.this, "读取失败", Toast.LENGTH_LONG).show();
                    }
                    break;
                
                case R.id.exit:
                    Android.os.Process.killProcess(Android.os.Process.myPid());
                    break;
                    
                default:
                    break;
            }
            
            
        }
    };
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import Android.app.Activity;
import Android.os.Bundle;
import Android.os.Environment;
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;
import com.luku.file.service.FileService;
public class fileActivity extends Activity
{
private EditText editText=null;
private Button   button =null;
private TextView content =null;
private Button   read=null;
private TextView textView1=null;
private Button   exit=null;

@Override
public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  textView1=(TextView)findViewById(R.id.textView1);
  content=(TextView)findViewById(R.id.content);
  editText=(EditText)findViewById(R.id.filename);
  button=(Button)findViewById(R.id.baocun);
  read=(Button)findViewById(R.id.read);
  exit=(Button)findViewById(R.id.exit);
  
  button.setOnClickListener(listener);
  read.setOnClickListener(listener);  
  exit.setOnClickListener(listener);
}

private OnClickListener listener=new OnClickListener()
{
  int resId = R.string.success;
  @Override
  public void onClick(View v)
  {
   Button btn=(Button)v;  
   File file=new File(Environment.getExternalStorageDirectory(),//得到SD卡根目录
     editText.getText().toString());                      //保存文件的文件名
  
   switch (btn.getId())
   {
    case R.id.baocun:
    if(Environment.getExternalStorageState().
      equals(Environment.MEDIA_MOUNTED)) //判断SD卡是否存在,并且可以可以读写
    {  
     try
     {
      FileOutputStream stream=new FileOutputStream(file);
      FileService.save(stream, content.getText().toString());
     }
     catch (IOException e)
     {
      e.printStackTrace();
      resId = R.string.error;
      Toast.makeText(fileActivity.this, resId, Toast.LENGTH_LONG).show();
     }  
     Toast.makeText(fileActivity.this, resId, Toast.LENGTH_LONG).show();
    }
    else
    {
     Toast.makeText(fileActivity.this, "SD卡不存在或写保护", Toast.LENGTH_LONG).show();
    }
     break;
    
    case R.id.read:
     try
     {
      InputStream instream=new FileInputStream(file);
      String string=FileService.read(instream);
      System.out.println(string);
      textView1.setText(string.toString());
     } catch (Exception e)
     {
      e.printStackTrace();
      Toast.makeText(fileActivity.this, "读取失败", Toast.LENGTH_LONG).show();
     }
     break;
    
    case R.id.exit:
     Android.os.Process.killProcess(Android.os.Process.myPid());
     break;
    
    default:
     break;
   }
  
  
  }
};
}

FileService文件



[java]
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileService
{
    /**
     * 保存数据
     * @param stream
     * @param content
     * @throws IOException
     */
    public static void save(OutputStream stream , String content) throws IOException
    {
        stream.write(content.getBytes());
        stream.close();
    }
    /**
     * 读取数据
     * @param inStream
     * @return
     * @throws IOException
     */
    public static String read(InputStream inStream) throws IOException
    {
        ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
        int len=-1;
        byte[] buffer =new byte[1024];      
        while( (len=inStream.read(buffer))!=-1 )
        {
            outputStream.write(buffer, 0, len);
        }
        byte[] data = outputStream.toByteArray();
        inStream.close();
        outputStream.close();
        return new String(data);
        
    }
    
}
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FileService
{
/**
  * 保存数据
  * @param stream
  * @param content
  * @throws IOException
  */
public static void save(OutputStream stream , String content) throws IOException
{
  stream.write(content.getBytes());
  stream.close();
}
/**
  * 读取数据
  * @param inStream
  * @return
  * @throws IOException
  */
public static String read(InputStream inStream) throws IOException
{
  ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
  int len=-1;
  byte[] buffer =new byte[1024];  
  while( (len=inStream.read(buffer))!=-1 )
  {
   outputStream.write(buffer, 0, len);
  }
  byte[] data = outputStream.toByteArray();
  inStream.close();
  outputStream.close();
  return new String(data);
  
}

}



main.xml文件


[java]
<?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"
    >
    
    <RelativeLayout xmlns:Android="http://schemas.android.com/apk/res/android"
        Android:orientation="vertical"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content">
            
            <TextView  
                Android:layout_width="90px"  
                Android:layout_height="wrap_content"  
                Android:text="文件名称:"
                Android:textSize="21px"
                Android:id="@+id/filenamelebal"
                />
            
            <EditText
                 Android:layout_width="fill_parent"
                 Android:layout_height="wrap_content"  
                 Android:layout_toRightOf="@id/filenamelebal"
                 Android:layout_alignTop="@id/filenamelebal"
                 Android:id="@+id/filename"
            ></EditText>
        ></RelativeLayout>
        
        <TextView  
                Android:layout_width="90px"  
                Android:layout_height="wrap_content"  
                Android:text="内容:"
                Android:textSize="21px"
                />
        <EditText
                 Android:layout_width="fill_parent"  
                 Android:layout_height="wrap_content"  
                 Android:minLines="3"
                 Android:id="@+id/content"
            ></EditText>
        <LinearLayout Android:id="@+id/linearLayout1" Android:layout_width="match_parent" Android:layout_height="wrap_content">
            <Button  
                Android:layout_height="wrap_content"  
                Android:id="@+id/baocun"  
                Android:text="保存"  
                Android:layout_width="wrap_content"></Button>
            <Button  
                Android:text="读取"  
                Android:id="@+id/read"  
                Android:layout_width="wrap_content"  
                Android:layout_height="wrap_content"></Button>
            <Button  
                Android:text="退出"  
                Android:id="@+id/exit"  
                Android:layout_width="wrap_content"  
                Android:layout_height="wrap_content"></Button>
                
        </LinearLayout>
        <TextView  
                Android:text="读取内容显示"  
                Android:id="@+id/textView1"  
                Android:layout_width="wrap_content"  
                Android:layout_height="wrap_content">
                </TextView>
        
        
        
</LinearLayout>
<?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"
    >

<RelativeLayout xmlns:Android="http://schemas.android.com/apk/res/android"
     Android:orientation="vertical"
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content">
      
      <TextView
       Android:layout_width="90px"
       Android:layout_height="wrap_content"
       Android:text="文件名称:"
       Android:textSize="21px"
       Android:id="@+id/filenamelebal"
       />
      
      <EditText
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_toRightOf="@id/filenamelebal"
        Android:layout_alignTop="@id/filenamelebal"
        Android:id="@+id/filename"
      ></EditText>
     ></RelativeLayout>
    
     <TextView
       Android:layout_width="90px"
       Android:layout_height="wrap_content"
       Android:text="内容:"
       Android:textSize="21px"
       />
  <EditText
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:minLines="3"
        Android:id="@+id/content"
      ></EditText>
     <LinearLayout Android:id="@+id/linearLayout1" Android:layout_width="match_parent" Android:layout_height="wrap_content">
         <Button
          Android:layout_height="wrap_content"
          Android:id="@+id/baocun"
          Android:text="保存"
          Android:layout_width="wrap_content"></Button>
         <Button
          Android:text="读取"
          Android:id="@+id/read"
          Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"></Button>
         <Button
          Android:text="退出"
          Android:id="@+id/exit"
          Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"></Button>
          
     </LinearLayout>
     <TextView
       Android:text="读取内容显示"
       Android:id="@+id/textView1"
       Android:layout_width="wrap_content"
       Android:layout_height="wrap_content">
       </TextView>
  
    
  
</LinearLayout>



配置文件

[java]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.android.com/apk/res/android"
      package="com.luku.file"
      Android:versionCode="1"
      Android:versionName="1.0">
    <uses-sdk Android:minSdkVersion="8" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission Android:name="Android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
    
    <application Android:icon="@drawable/icon" Android:label="@string/app_name">
        <uses-library Android:name="Android.test.runner"></uses-library>
        <activity Android:name=".fileActivity"
                  Android:label="@string/app_name">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    
    <instrumentation  
        Android:name="Android.test.InstrumentationTestRunner"
        Android:targetPackage="com.luku.file"
        Android:label="Test for my app"
    ></instrumentation>
    
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.android.com/apk/res/android"
      package="com.luku.file"
      Android:versionCode="1"
      Android:versionName="1.0">
    <uses-sdk Android:minSdkVersion="8" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission Android:name="Android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

    <application Android:icon="@drawable/icon" Android:label="@string/app_name">
     <uses-library Android:name="Android.test.runner"></uses-library>
        <activity Android:name=".fileActivity"
                  Android:label="@string/app_name">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
  
    <instrumentation
     Android:name="Android.test.InstrumentationTestRunner"
     Android:targetPackage="com.luku.file"
     Android:label="Test for my app"
    ></instrumentation>
  
</manifest>


喜欢0 评分0
游客

返回顶部