1. 使用mksdcard命令建立一個名為 sdcard.img的128M(M需大寫)SD卡鏡像。
mksdcard 128M sdcard.img
2.把sdcard.img拷貝到D:\projects2下,在Eclipse中的Run Configuration對話方塊中設定啟動參數。
-sdcard D:\projects2\sdcard.img
這樣SD Card就可用了。
3.sdcard中加入內容
adb push E:\Xunlei\give.mp3 /sdcard/give.mp3。
4.應用程式中對檔案的讀寫
注意如果在應用程式中要對SD card進行寫操作的話,
需要加上androi許可權android.permission.WRITE_EXTERNAL_STORAGE
如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
執行個體1:
Button button6 = (Button) findViewById(R.id.Button06);
OnClickListener listener6 = new OnClickListener() {
@Override
public void onClick(View v) {
createSDFile();
}
};
button6.setOnClickListener(listener6);
Button button7 = (Button) findViewById(R.id.Button07);
OnClickListener listener7 = new OnClickListener() {
@Override
public void onClick(View v) {
writeSDFile(kFileName);
}
};
button7.setOnClickListener(listener7);
Button button8 = (Button) findViewById(R.id.Button08);
OnClickListener listener8 = new OnClickListener() {
@Override
public void onClick(View v) {
readSDFile(kFileName);
}
};
button8.setOnClickListener(listener8);
String kFileName="/sdcard/uad2/test.txt";
void createSDFile()
{
createSDFile(kFileName);
}
final static String kSdCardRoot="sdcard";
void createSDFile(String fileFullName)
{
if(fileFullName.charAt(0)=='/')
fileFullName=fileFullName.substring(1, fileFullName.length());
String name[]=fileFullName.split("/");
if(name==null||name.length<2)
return;
if(!name[0].equals(kSdCardRoot))
{
Log.i(tag,fileFullName+" is not a file"+name[0]);
return;
}
File sdDir=new File("/"+kSdCardRoot);
if(!sdDir.exists())
{
Log.i(tag, "SD card is not exists");
return;
}
if(!sdDir.canWrite())
{
Log.i(tag, sdDir.length()+"SD card can not be wrote"+sdDir.canRead());
return;
}
File dir=sdDir;
for(int i=1;i<name.length-1;i++)
{
dir=new File(dir.getAbsolutePath()+"/"+name[i]);
if(dir.exists())
continue;
boolean res=dir.mkdir();
if(!res)
{
Log.i(tag, "create dir:"+res+" fail"+name[i]);
return;
}
}
String fileName=name[name.length-1].trim();
if(fileName.length()>0)
{
File file=new File(dir.getAbsolutePath()+"/"+name[name.length-1]);
if(!file.exists())
{
try{
file.createNewFile();
}catch(IOException e)
{
Log.e(tag, "creat File erro:",e);
}
}
}
}
void writeSDFile(String fileName)
{
File file=new File(fileName);
if(!file.exists())
createSDFile(fileName);
if(!file.canWrite())
{
Log.i(tag,"file:"+file.getAbsoluteFile()+" can not to be wrote");
return;
}
String content="hello:"+System.currentTimeMillis();
FileOutputStream os=null;
try{
os=new FileOutputStream(file);
os.write(content.getBytes());
Log.i(tag, "write:"+content);
}
catch(IOException e)
{
Log.e(tag, "write file",e);
}
finally
{
if(os!=null)
{
try{
os.flush();
os.close();
}catch(IOException e)
{
Log.e(tag, "close file",e);
}
}
}
}
void readSDFile(String fileName)
{
String content;
FileInputStream is=null;
File file=new File(fileName);
if(!file.exists())
{
Log.i(tag,file.getAbsolutePath()+" is not exists");
return;
}
if(!file.canRead())
{
Log.i(tag,file.getAbsolutePath()+" can not be read");
return;
}
try{
is=new FileInputStream(file);
byte buffer[]=new byte[is.available()];
is.read(buffer);
content=new String(buffer);
Log.i(tag, "read SD file:"+content);
//InputStreamReader inReader = new InputStreamReader(is);
}
catch(IOException e)
{
Log.e(tag, "write file",e);
}
finally
{
if(is!=null)
{
try{
is.close();
}catch(IOException e)
{
Log.e(tag, "close file",e);
}
}
}
}