android 讀寫sdcard 首先需要有sdcard, 如果用真機 確保sdcard 插入,如果是模擬器上開發,需要建立sdcard 的映像文件,
進入到 ANDROID SDK 安裝目錄下的tools 子目錄, 運行命令L
mksdcard -l sdcard 1024M d:/sdcard.img //注意是L label, 不是1 或者i,sdcard image支持FAT32格式,後面是容量大小 +路徑+文件名
建成後,完成加載sdcard動作 方法有2
1.可以在 命令行方式 打開模擬器 傳入參數
emulator -sdcard d:/sdcard.img
2. 在eclipse 裏 Run>> Run Configuration >> Target 標籤中的Additional Emulator Command Line Options 框下輸入:
-sdcard d:/sdcard.img運行模擬器就可以模擬插入sdcard時的狀態。
接下來可以開始程序部分了
訪問sdcard 需要聲明訪問權限 menifest.xml 文件中需要額外添加 :
<!-- 在sdcard中創建與刪除文件權限-->
<uses-permission android:name = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<!-- 向sdcard寫入數據權限 -->
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 向sdcard 讀數據權限 , 不讀數據可以不聲明-->
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
java 代碼部分
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))//判斷存儲卡是否存在
{
try {
File sdcardDir = Environment.getExternalStorageDirectory();// 獲取sdcard 路徑
path = sdcardDir.getAbsolutePath();
File file = new File(path + "/testfile.txt");
System.out.println("the file path =" + file.getPath());
if (!file.exists()) {
file.createNewFile();
}
String wstr = "write the string to testfile.txt is ok ?";
/*
*
* method 1
*/
FileOutputStream fos = new FileOutputStream(file);
fos.write(wstr.getBytes());
fos.close();
}catch (Exception e) {
e.printStackTrace();
}
}
核心部分摘錄如上,
另 附 其他三種方法可以代替 method 1
/*
* method 2
BufferedWriter bufwrt = new BufferedWriter(new OutputStreamWriter(fos));
bufwrt.write(wstr);
bufwrt.newLine();
bufwrt.flush();
bufwrt.close();
*/
/* method 3 know the size of data.
RandomAccessFile raf = new RandomAccessFile(file , "rw");
//將文件記錄指針移動到最後
raf.seek(file.length());
// 輸出文件內容
raf.write(wstr.getBytes());
raf.close();
*/
/*
*
* method 4
* 引自他人
*
public static boolean writeFile(byte[] data, String path) {
DataOutputStream bufferOut = null;
try {
bufferOut = new DataOutputStream(new FileOutputStream(path));
bufferOut.write(data);// 通過管道寫入文件
bufferOut.close();
return true;
} catch (IOException e) {
return false;
}
*/