Android存储 SD卡或者文件存储实现。

Android实现SD卡和实现内存文件存储的做法基本是一样的。只是取得文件路径的方法不一样,基本上跟java的文件操作是一致的,下面是程序的代码。配置取的位置和实现有所不同,其他是一样的,下面是代码:

main.xml:

01 <?xml version="1.0" encoding="utf-8"?> 
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
03     android:orientation="vertical" 
04     android:layout_width="fill_parent" 
05     android:layout_height="fill_parent"
06 <EditText android:id="@+id/edit1" 
07     android:layout_width="fill_parent" 
08     android:layout_height="wrap_content" 
09     android:lines="4"/> 
10 <Button android:id="@+id/write" 
11     android:layout_width="wrap_content" 
12     android:layout_height="wrap_content"  
13     android:text="@string/write"/> 
14 <EditText android:id="@+id/edit2" 
15     android:layout_width="fill_parent" 
16     android:layout_height="wrap_content" 
17     android:editable="false" 
18     android:cursorVisible="false" 
19     android:lines="4"/>       
20 <Button android:id="@+id/read" 
21     android:layout_width="wrap_content" 
22     android:layout_height="wrap_content"  
23     android:text="@string/read"/> 
24 </LinearLayout>

在AndroidManifest清单文件中要对SD卡读取进行支持。代码如下:

1 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 
2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在String.xml中添加两个内容:

1 <string name="read">读取</string
2 lt;string name="write">写入</string>

下面是文件实现的代码:

01 package cn.jason.io;
02  
03 import java.io.FileInputStream;
04 import java.io.FileOutputStream;
05 import java.io.IOException;
06 import java.io.PrintStream;
07  
08 import android.app.Activity;
09 import android.os.Bundle;
10 import android.view.View;
11 import android.view.View.OnClickListener;
12 import android.widget.Button;
13 import android.widget.EditText;
14  
15 public class FileTestActivity extends Activity {
16      
17     final String FILE = "jason.bin";
18      
19     @Override
20     public void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.main);
23          
24         Button read = (Button) findViewById(R.id.read);
25         Button write = (Button) findViewById(R.id.write);
26          
27         final EditText edit1 = (EditText) findViewById(R.id.edit1);
28         final EditText edit2 = (EditText) findViewById(R.id.edit2);
29          
30          
31         write.setOnClickListener(new OnClickListener() {
32              
33             @Override
34             public void onClick(View v) {
35                 write(edit1.getText().toString());
36                 edit1.setText("");
37             }
38         });
39          
40         read.setOnClickListener(new OnClickListener() {
41              
42             @Override
43             public void onClick(View v) {
44                 edit2.setText(read());
45             }
46         });
47     }
48      
49      
50     private String read() {
51         try {
52             FileInputStream fis = openFileInput(FILE);
53             byte[] buffer = new byte[1024];
54             int hasRead = 0;
55             StringBuilder sb = new StringBuilder("");
56             while ((hasRead = fis.read(buffer)) > 0) {
57                 sb.append(new String(buffer, 0, hasRead));
58             }
59             return sb.toString();
60         } catch (IOException e) {
61             e.printStackTrace();
62         }
63         return null;
64     }
65      
66     private void write(String content)
67     {
68         try
69         {
70             // 以追加模式打开文件输出流
71             FileOutputStream fos = openFileOutput(FILE, MODE_APPEND);
72             // 将FileOutputStream包装成PrintStream
73             PrintStream ps = new PrintStream(fos);
74             // 输出文件内容
75             ps.println(content);
76             ps.close();
77         }
78         catch (Exception e)
79         {
80             e.printStackTrace();
81         }
82     }
83 }

下面是sd卡存储实现的代码:

01 package cn.jason.io;
02  
03 import java.io.BufferedReader;
04 import java.io.File;
05 import java.io.FileInputStream;
06 import java.io.FileNotFoundException;
07 import java.io.IOException;
08 import java.io.InputStreamReader;
09 import java.io.RandomAccessFile;
10 import java.net.ContentHandler;
11  
12 import android.app.Activity;
13 import android.os.Bundle;
14 import android.os.Environment;
15 import android.view.View;
16 import android.view.View.OnClickListener;
17 import android.widget.Button;
18 import android.widget.EditText;
19  
20 public class SDCardTestActivity extends Activity {
21      
22     final String FILE = "/jason.bin";
23      
24     @Override
25     public void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.main);
28          
29         Button read = (Button) findViewById(R.id.read);
30         Button write = (Button) findViewById(R.id.write);
31         // 获取两个文本框
32         final EditText edit1 = (EditText) findViewById(R.id.edit1);
33         final EditText edit2 = (EditText) findViewById(R.id.edit2);
34         // 为write按钮绑定事件监听器
35         write.setOnClickListener(new OnClickListener() {
36             @Override
37             public void onClick(View source) {
38                 // 将edit1中的内容写入文件中
39                 write(edit1.getText().toString());
40                 edit1.setText("");
41             }
42         });
43          
44         read.setOnClickListener(new OnClickListener() {
45             @Override
46             public void onClick(View v) {
47                 // 读取指定文件中的内容,并显示出来
48                 edit2.setText(read());
49             }
50         });
51     }
52      
53     private String read() {
54         // 如果手机插入了SD卡,而且应用程序具有访问SD的权限
55          
56         try {
57             if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
58                 // 获取SD卡的目录
59                 File sdDirFile = Environment.getExternalStorageDirectory();
60                 //获取指定文件对应的输入流
61                 FileInputStream fis = newFileInputStream(sdDirFile.getCanonicalPath()+ FILE);
62                 //将指定输入流包装成BufferedReader
63                 BufferedReader br = new BufferedReader(new InputStreamReader(fis));
64                  
65                 StringBuilder sb = new StringBuilder("");
66                 String line = null;
67                 while ((line =br.readLine())!=null) {
68                     sb.append(line);
69                 }
70                 return sb.toString();
71             }
72         } catch (FileNotFoundException e) {
73             e.printStackTrace();
74         } catch (IOException e) {
75             e.printStackTrace();
76         }
77         return null;
78     }
79  
80     private void write(String context){
81         try {
82             if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
83                 File sdDir = Environment.getExternalStorageDirectory();
84                 File targetFile = new File(sdDir.getCanonicalPath()+ FILE);
85                 RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
86                 raf.seek(targetFile.length());
87                 raf.write(context.getBytes());
88                 raf.close();
89             }
90         } catch (Exception e) {
91         }
92     }
93 }

转自:http://blog.csdn.net/jasonchris/article/details/7619468

原文地址:https://www.cnblogs.com/xiashenbin/p/2668498.html