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;
}
}
很小的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;
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories