Tri*_*ahu 1 android android-sdcard android-permissions
我想在"/ mnt/extsd/MyFolder"这个路径上创建一个目录.在调用mkdir()时它返回false.我在我的平板电脑上插入了sdcard,将外部路径设为"/ mnt/extsd"并尝试在此路径上创建一个文件夹.以下是我的代码,
File lSDCardDirFile = new File("/mnt/extsd/MyFolder");
if (!lSDCardDirFile.exists()) {
System.out.println("Is folder created --- " + lSDCardDirFile.mkdirs());
}
Run Code Online (Sandbox Code Playgroud)
我给了权限,.我想在外部SD卡中创建可移动SD卡的文件夹.我使用的是android 4.0 ICS版设备.
我创建了一种不同的方法来获取外部SD卡的路径,
public static String[] getStorageDirectories()
{
String[] lDirs = null;
BufferedReader lBufferReader = null;
try {
lBufferReader = new BufferedReader(new FileReader("/proc/mounts"));
ArrayList list = new ArrayList();
String lStrline;
while ((lStrline = lBufferReader.readLine()) != null) {
if (lStrline.contains("vfat") || lStrline.contains("/mnt")) {
StringTokenizer lTokenizer = new StringTokenizer(lStrline, " ");
String lStrPath = lTokenizer.nextToken();
lStrPath = lTokenizer.nextToken(); // Take the second token, i.e. mount point
if (lStrPath.equals(Environment.getExternalStorageDirectory().getPath())) {
list.add(lStrPath);
}
else if (lStrline.contains("/dev/block/vold")) {
if (!lStrline.contains("/mnt/secure") && !lStrline.contains("/mnt/asec") && !lStrline.contains("/mnt/obb") && !lStrline.contains("/dev/mapper") && !lStrline.contains("tmpfs")) {
list.add(lStrPath);
}
}
}
}
lDirs = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
lDirs[i] = (String) list.get(i);
}
}
catch (FileNotFoundException e) {}
catch (IOException e) {}
finally {
if (lBufferReader != null) {
try {
lBufferReader.close();
} catch (IOException e) {
}
}
}
return lDirs;
}`
Run Code Online (Sandbox Code Playgroud)
从这个方法我得到了路径,但在尝试创建目录时,mkdir()返回false.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
我的三星Galaxy s3中有两个文件夹,如extSdCard和sdcard.
使用以下代码进行选择.
private String[] mFilePaths;
File storageDir = new File("/mnt/");
if(storageDir.isDirectory()){
File[] dirList = storageDir.listFiles();
for (int i = 0; i < dirList.length; i++)
{
mFilePaths[i] = dirList[i].getAbsolutePath();
System.out.println("...................................."+mFilePaths[i]);
}
}
File Dir;
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))//check if sd card is mounted
{
Dir=new File(android.os.Environment.getExternalStorageDirectory(),"your folder name");
if(!Dir.exists())// if directory is not here
Dir.mkdirs() // make directory
}
Run Code Online (Sandbox Code Playgroud)
编辑
获取内部和外部存储的路径.下面的代码适用于三星galaxy s3.
String externalpath = new String();
String internalpath = new String();
public void getExternalMounts() {
Runtime runtime = Runtime.getRuntime();
try
{
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//external card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
externalpath = externalpath.concat("*" + columns[1] + "n");
}
}
else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
internalpath = internalpath.concat(columns[1] + "n");
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("Path of sd card external............"+externalpath);
System.out.println("Path of internal memory............"+internalpath);
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用路径os外部存储来创建文件夹.
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))//check if sd card is mounted
{
Dir=new File(externalpath,"your folder name");
if(!Dir.exists())// if directory is not here
Dir.mkdirs() // make directory
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6536 次 |
最近记录: |