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;
}
*/