Android—SDCard数据存取&Environment简介
1:Environment简介:
Environment是android.os包下的一个类,谷歌官方文旦的解释为:Provides access to environment variables(提供访问环境的变量),由此可看出,该类是用于程序访问SDCard的一个设备访问类
Environment 常量 构造方法 方法如下:
解析:比如字段:DIRECTORY_PICTURES 是返回SDcard中Pictures目录的名字 其中的SDCardPicturesName==“Pictures”;
String SDCardPicturesName=Environment.DIRECTORY_PICTURES;
比如构造方法:getExternalStorageDirectory();返回返回的主要外部存储目录。也就是SDCard的根目录了。如下图所示:
2:通过一个简单的android projec项目使用Environment对SDCard文件进行读写穿件文件目录等的操作
首先想要操作存储卡数据需要获取权限,我们在AndroidMainfest.xml中进行配置如下:
<!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
测试应用界面如下。不做解释,想比一看就能明白用意:
示例代码如下:
1 package activity.cyq.helloandroidstudio; 2 3 import android.os.Environment; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.EditText; 8 import android.widget.TextView; 9 import android.widget.Toast; 10 11 import java.io.BufferedReader; 12 import java.io.File; 13 import java.io.FileInputStream; 14 import java.io.FileNotFoundException; 15 import java.io.FileOutputStream; 16 import java.io.IOException; 17 import java.io.InputStreamReader; 18 import java.io.OutputStreamWriter; 19 20 public class MainActivity extends AppCompatActivity { 21 private EditText writeEdit; 22 private TextView showData; 23 private final String FILE_NAME = "MyCreate.txt"; 24 File sdcard = Environment.getExternalStoragePublicDirectory("txt");//定义主要外部存储目录。 25 String file = Environment.getExternalStorageDirectory() + "/Pictures"; 26 File myfile = new File(sdcard, FILE_NAME); 27 File testFile = new File(file); 28 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 setContentView(R.layout.activity_main); 33 34 writeEdit = (EditText) findViewById(R.id.write_edit); 35 showData = (TextView) findViewById(R.id.show_text); 36 37 /*写入数据到SDCard文件*/ 38 findViewById(R.id.write_btn).setOnClickListener(new View.OnClickListener() { 39 @Override 40 public void onClick(View v) { 41 if (!sdcard.exists()) { 42 Toast.makeText(MainActivity.this, "该设备SDCard不存在", Toast.LENGTH_SHORT).show(); //判断设备是否存在sdcard 43 return; 44 } 45 if (!myfile.exists()) { /*文件不存在则穿件文件*/ 46 try { 47 myfile.createNewFile(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 } 51 } 52 /*文件写入操作*/ 53 try { 54 FileOutputStream fos = new FileOutputStream(myfile); 55 OutputStreamWriter opw = new OutputStreamWriter(fos); 56 opw.write(writeEdit.getText().toString()); 57 opw.flush(); 58 opw.close(); 59 fos.close(); 60 Toast.makeText(MainActivity.this, "数据写入成功", Toast.LENGTH_SHORT).show(); 61 } catch (FileNotFoundException e) { 62 e.printStackTrace(); 63 } catch (IOException e) { 64 e.printStackTrace(); 65 } 66 67 } 68 }); 69 70 /*读取SDCard中的文件数据*/ 71 findViewById(R.id.read_btn).setOnClickListener(new View.OnClickListener() { 72 @Override 73 public void onClick(View v) { 74 if (!sdcard.exists()) { 75 Toast.makeText(MainActivity.this, "该设备SDCard不存在", Toast.LENGTH_SHORT).show(); //判断设备是否存在sdcard 76 return; 77 } 78 if (!myfile.exists()) { 79 try { 80 myfile.createNewFile(); 81 } catch (IOException e) { 82 e.printStackTrace(); 83 } 84 } 85 try { 86 FileInputStream fis = new FileInputStream(myfile); 87 InputStreamReader isr = new InputStreamReader(fis); 88 BufferedReader br = new BufferedReader(isr); 89 StringBuilder strBuilder = new StringBuilder(); 90 String line = ""; 91 while ((line = br.readLine()) != null) { 92 strBuilder.append(line); 93 } 94 br.close(); 95 isr.close(); 96 fis.close(); 97 Toast.makeText(MainActivity.this, "数据读取成功", Toast.LENGTH_SHORT).show(); 98 showData.setText(strBuilder); 99 } catch (FileNotFoundException e) { 100 e.printStackTrace(); 101 } catch (IOException e) { 102 e.printStackTrace(); 103 } 104 105 } 106 }); 107 108 findViewById(R.id.text_btn).setOnClickListener(new View.OnClickListener() { 109 @Override 110 public void onClick(View v) { 111 if (testFile.exists()) { 112 Toast.makeText(MainActivity.this, "Pictures文件存在", Toast.LENGTH_SHORT).show(); 113 try { 114 new File(testFile + "/testNew.txt").createNewFile();/*调用File的构造方法在Pictures目录下创建一个文件*/ 115 } catch (IOException e) { 116 e.printStackTrace(); 117 } 118 } else { 119 Toast.makeText(MainActivity.this, "Pictures文件不存在", Toast.LENGTH_SHORT).show(); 120 } 121 } 122 }); 123 } 124 }
补充:File类的四个构造方法:
File(String dirPath, String name;