SD卡的地址mnt/sdcard,mnt和安卓底层linux内核有关。文件系统是被加载的?
android对文件的操作可以使用java原本的io函数。区别在于需要对manifest.xml进行修改。所以如果app包含文件读写功能,那么首先要让app获得读写SD卡的权限,在<application</application>的上方添加以下三句话。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
另一个区别在于在J2SE中文件地址用\\表示父子关系,而Android与Symbian一致,都是用/表示父子关系。
获得SD卡根目录路径Environment.getExternalStorageDirectory(),相当于"/mnt/sdcard/"。如果不是根目录,而是子目录比如/cd/,那么path=Environment.getExternalStorageDirectory()+"/cd/",cd的前后/不能少。
1、创建文件夹
File filex = new File("/mnt/sdcard/A");
if(!filex.exists()){
try{
filex.mkdirs();
}
catch (Exception e) {
e.printStackTrace();
}
}
2、创建文件
File file = new File("/mnt/sdcard/A/m.txt");//这里可以是txt也可是jpg,格式任意
if (!file.exists()){
try {
file.createNewFile();
}
catch (Exception e) {
e.printStackTrace();
}
}
3、写入文件
DataOutputStream out1;
String s1=editText1.getText().toString();
try{
if(s1.length()!=0){m1.delete();m1.createNewFile();}
out1=new DataOutputStream(new FileOutputStream(path+"m1.txt"));
out1.writeUTF(s1);
out1.close();
}
catch (Exception e) {
e.printStackTrace();
}
4、读出文件
DataInputStream in;
try {
in=new DataInputStream(new FileInputStream(path+"m1.txt"));
editText1.setText(in.readUTF());
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
5、完整程序
package com.example.androidfile;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText editText1;
String path="/mnt/sdcard/A/";
File filex = new File(path);
File m1 = new File(path+"m1.txt");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(!filex.exists()){
try{
filex.mkdirs();
}
catch (Exception e) {
e.printStackTrace();
}
}
if (!m1.exists()){
try {
m1.createNewFile();
}
catch (Exception e) {
e.printStackTrace();
}
}
editText1=(EditText) findViewById(R.id.editText1);
DataInputStream in;
try {
in=new DataInputStream(new FileInputStream(path+"m1.txt"));
editText1.setText(in.readUTF());
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
Button Button1=(Button) findViewById(R.id.button1);
Button1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
DataOutputStream out1;
String s1=editText1.getText().toString();
try{
if(s1.length()!=0){m1.delete();m1.createNewFile();}
out1=new DataOutputStream(new FileOutputStream(path+"m1.txt"));
out1.writeUTF(s1);
out1.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidfile"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.androidfile.MainActivity"
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>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
</manifest>
6、实际效果