为了更好的存,取应用中的大文件数据,应用程序需要读,写,sd卡上的文件.sd卡大大的扩充手机的存储能力.
读, 写sd卡上的文件 请安如下步骤,进行.
- 调用Environment的 getExternalStorageState()方法 判断手机上是否插入了sd卡,并且应用程序具有读写sd卡的权限.代码提示如下:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
(2)调用Environment 的getExternalStorageDirectory() 方法来获取外部存储器,也就是sd卡的目录.
(3) 使用 FileInputStream FileOutStream FileReader 或者 FileWriter 读,写 sd卡里面的文件
为了读 写 sd卡上的数据,必须在应用程序的清单文件(AndroidManifest.xml)中添加读,写sd卡的权限.<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
package com.test.sdcardtest;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
/**
* 读写sd卡上的文件
*/
public class MainActivity extends AppCompatActivity {
Button btnWrite, btnRead;
EditText etWrite;
TextView tvShow;
final String FILE_NAME = "/sd.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnWrite = (Button) findViewById(R.id.btn_write);
btnRead = (Button) findViewById(R.id.btn_read);
tvShow = (TextView) findViewById(R.id.tv_read);
etWrite = (EditText) findViewById(R.id.et_write);
btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
write(etWrite.getText().toString());
etWrite.setText("");
}
});
btnRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvShow.setText(read2());
}
});
}
private String read2() {
//如果手机已经安装了sd卡
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
// 获取sd卡的对应的存储目录
File sdCardDir = Environment.getExternalStorageDirectory();
//获取指定文件对应的输入流
try {
FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath()+FILE_NAME);
//将指定输入流包装成 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder("");
String line = null;
//循环读取文件内容
while((line=br.readLine())!=null){
sb.append(line);
}
//关闭资源
br.close();
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private void write(String s) {
//判断手机是否安装了sd卡
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
try {
File targetFile =new File(sdCardDir.getCanonicalPath()+FILE_NAME);
//以指定文件创建 RandomAccessFile对象
RandomAccessFile rdf = new RandomAccessFile(targetFile,"rw");
//将文件记录指针移动到最后
rdf.seek(targetFile.length());
//输出文件
rdf.write(s.getBytes());
rdf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}