您的位置:首页 > 移动开发 > Android开发

Android-SD卡文件夹创建和删除实现

2015-08-11 20:11 525 查看
SD卡文件夹创建和删除实现

很小的Demo,代码不多,其中有一些细节还是考虑的不全面。

 * 获取SD卡中的目录

 * 功能:

 * 创建文件夹,删除文件夹,返回键退出程序

 * ListView 使用BaseAdapter

源码下载地址:http://download.csdn.net/detail/u014657752/8992429









添加权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.mywork0811.MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

</RelativeLayout>


item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:src="@drawable/ffff" />

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/img" />

<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:layout_alignParentRight="true"
android:layout_margin="5dp" />

</RelativeLayout>

MainActivity.java
package com.example.mywork0811;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

/**
* 获取SD卡中的目录
* 功能:
* 创建文件夹,删除文件夹,返回键退出程序
* ListView 使用BaseAdapter
*
* @author yu_longji
*
*/
public class MainActivity extends Activity {

ListView listView;
MyBaseAdapter myBaseAdapter;

File parentFile;
long exitTime = 0;
boolean bFlage = true;// 该变量用于判断是否退出程序和返回上一级目录
File[] currentFiles;
File SDFile; // SD卡根路径
List<String> SDList;

List<String> list;// 保存checkbox选中的文件夹路径
String filepath;// checkbox选中的文件夹路径

Button addButton;
Button deleButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addButton = (Button) findViewById(R.id.add);
deleButton = (Button) findViewById(R.id.dele);
listView = (ListView) findViewById(R.id.list);
myBaseAdapter = new MyBaseAdapter(this);
getSDList();
listView.setAdapter(myBaseAdapter);
// 点击Item进入该文件夹
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 判断是否为文件
if (currentFiles[position].isFile()) {
return;
}
// 遍历该文件夹
File[] tempFiles = currentFiles[position].listFiles();
// if (tempFiles == null || tempFiles.length == 0) {
// Toast.makeText(MainActivity.this, "该文件夹下无文件",
// Toast.LENGTH_SHORT).show();
// } else {
bFlage = false;
parentFile = currentFiles[position];
currentFiles = tempFiles;
initflateListView(currentFiles);
// }
}
});
// 新建文件夹
final Random random = new Random(25);
addButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (parentFile == null) {
File f1 = new File(SDFile + "/新建文件夹" + random.nextInt(1000));
f1.mkdir();
// Log.v(" 新建文件夹", f1 + " ");
getSDList();
} else {
File f1 = new File(parentFile + "/新建文件夹"
+ random.nextInt(1000));
f1.mkdir();
// Log.v(" 新建文件夹", f1 + " ");
currentFiles = parentFile.listFiles();
initflateListView(currentFiles);
}
}
});
// 删除按键
deleButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

if (list.size() != 0) {
boolean flage = false;
for (String string : list) {
File dir = new File(string);

flage = deleteDir(dir);
Log.v("listdir", dir + " ");
}
if (parentFile != null) {
currentFiles = parentFile.listFiles();
initflateListView(currentFiles);
} else {
getSDList();
}
Log.v("boolean", flage + " ");
if (flage) {

myBaseAdapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "删除成功",
Toast.LENGTH_SHORT).show();
} else {
myBaseAdapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "删除失败",
Toast.LENGTH_SHORT).show();
}
}

}
});
}

// 遍历文件并更新myBaseAdapter
private void initflateListView(File[] file) {
SDList = new ArrayList<>();
for (int i = 0; i < file.length; i++) {
SDList.add(file[i].getName());
}
myBaseAdapter.notifyDataSetChanged();
}

// 获取sd卡根目录路径
private void getSDList() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// File file=new File("/");
// File[] currentFiles=File.listRoots();
// 获取sd卡根目录路径
SDFile = Environment.getExternalStorageDirectory();
// 遍历当前SD卡根目录所有的文件
currentFiles = SDFile.listFiles();
initflateListView(currentFiles);
}
}

// 删除有内容的目录
public boolean deleteDir(File dir) {
File[] files = dir.listFiles();
int i = files.length;
Log.v("||", String.valueOf(i) + " ");
if (dir.isFile() || dir.listFiles().length == 0) {
dir.delete();
return true;
} else {
// File[] files = dir.listFiles();
for (File file : files) {
// 判断当前file是否为文件夹,file目录下是否有文件
if (file.isDirectory() && file.listFiles().length != 0) {
deleteDir(file);
} else {
// 删除文件
file.delete();
return true;
}
}
}
return false;
}

// 返回上一层目录
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
if (bFlage) {
exit();// 退出应用
} else {
try {

String s1 = parentFile.getCanonicalPath() + " ";
String s2 = Environment.getExternalStorageDirectory()
.getAbsoluteFile() + " ";
boolean bl = s1.equals(s2);

if (!bl) {
parentFile = parentFile.getParentFile();
currentFiles = parentFile.listFiles();
initflateListView(currentFiles);
} else {
bFlage = true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return true;
}
return super.onKeyDown(keyCode, event);

}

// 连续按两次返回键
public void exit() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
}

public class MyBaseAdapter extends BaseAdapter {
Context context;
LayoutInflater inflater;

public MyBaseAdapter(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return SDList.size();
}

@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {

convertView = inflater.inflate(R.layout.item_layout, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) convertView
.findViewById(R.id.textView);
viewHolder.checkBox = (CheckBox) convertView
.findViewById(R.id.checkbox);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// SDList用于存放文件夹的名称
viewHolder.textView.setText(SDList.get(position));
// checkbox 删除
list = new ArrayList<>();
viewHolder.checkBox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {

Log.v("listposition", position + " ");

if (parentFile == null) {
String filepath = SDFile + "/"
+ SDList.get(position);
list.add(filepath);
} else {
String filepath = parentFile + "/"
+ SDList.get(position);
list.add(filepath);
Log.v("listfilepath", filepath + " ");
}
}
});
// 将checkBox的选中状态设置为空
viewHolder.checkBox.setChecked(false);
return convertView;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}

public class ViewHolder {
private ImageView imageView;
private TextView textView;
private CheckBox checkBox;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息