安卓打开java文件管理器_Android开发之简单文件管理器实现方法
本文实例讲述了Android开发之简单文件管理器实现方法。分享给大家供大家参考,具体如下:
这里运用Java I/O、ListActivity、Dialog、Bitmap等实现简单文件管理器,可以查看目录文件,修改文件名,删除文件,打开文件。比较简单,直接看代码:
先看布局文件:
layout/main.xml<?xml version="1.0" encoding="utf-8"?>
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
文件列表布局:
layout/file.xml<?xml version="1.0" encoding="utf-8"?>
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp">
修改文件名对话框布局文件:
layout/rename_dialog.xml<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
主Activity:public class MainActivity extends ListActivity {
private static final String ROOT_PATH = "/";
//存储文件名称
private ArrayList names = null;
//存储文件路径
private ArrayList paths = null;
private View view;
private EditText editText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//显示文件列表
showFileDir(ROOT_PATH);
}
private void showFileDir(String path){
names = new ArrayList();
paths = new ArrayList();
File file = new File(path);
File[] files = file.listFiles();
//如果当前目录不是根目录
if (!ROOT_PATH.equals(path)){
names.add("@1");
paths.add(ROOT_PATH);
names.add("@2");
paths.add(file.getParent());
}
//添加所有文件
for (File f : files){
names.add(f.getName());
paths.add(f.getPath());
}
this.setListAdapter(new MyAdapter(this,names, paths));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String path = paths.get(position);
File file = new File(path);
// 文件存在并可读
if (file.exists() && file.canRead()){
if (file.isDirectory()){
//显示子目录及文件
showFileDir(path);
}
else{
//处理文件
fileHandle(file);
}
}
//没有权限
else{
Resources res = getResources();
new AlertDialog.Builder(this).setTitle("Message")
.setMessage(res.getString(R.string.no_permission))
.setPositiveButton("OK",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
super.onListItemClick(l, v, position, id);
}
//对文件进行增删改
private void fileHandle(final File file){
OnClickListener listener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 打开文件
if (which == 0){
openFile(file);
}
//修改文件名
else if(which == 1){
LayoutInflater factory = LayoutInflater.from(MainActivity.this);
view = factory.inflate(R.layout.rename_dialog, null);
editText = (EditText)view.findViewById(R.id.editText);
editText.setText(file.getName());
OnClickListener listener2 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String modifyName = editText.getText().toString();
final String fpath = file.getParentFile().getPath();
final File newFile = new File(fpath + "/" + modifyName);
if (newFile.exists()){
//排除没有修改情况
if (!modifyName.equals(file.getName())){
new AlertDialog.Builder(MainActivity.this)
.setTitle("注意!")
.setMessage("文件名已存在,是否覆盖?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (file.renameTo(newFile)){
showFileDir(fpath);
displayToast("重命名成功!");
}
else{
displayToast("重命名失败!");
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
}
else{
if (file.renameTo(newFile)){
showFileDir(fpath);
displayToast("重命名成功!");
}
else{
displayToast("重命名失败!");
}
}
}
};
AlertDialog renameDialog = new AlertDialog.Builder(MainActivity.this).create();
renameDialog.setView(view);
renameDialog.setButton("确定", listener2);
renameDialog.setButton2("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
renameDialog.show();
}
//删除文件
else{
new AlertDialog.Builder(MainActivity.this)
.setTitle("注意!")
.setMessage("确定要删除此文件吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(file.delete()){
//更新文件列表
showFileDir(file.getParent());
displayToast("删除成功!");
}
else{
displayToast("删除失败!");
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
}
};
//选择文件时,弹出增删该操作选项对话框
String[] menu = {"打开文件","重命名","删除文件"};
new AlertDialog.Builder(MainActivity.this)
.setTitle("请选择要进行的操作!")
.setItems(menu, listener)
.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}
//打开文件
private void openFile(File file){
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
String type = getMIMEType(file);
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);
}
//获取文件mimetype
private String getMIMEType(File file){
String type = "";
String name = file.getName();
//文件扩展名
String end = name.substring(name.lastIndexOf(".") + 1, name.length()).toLowerCase();
if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")){
type = "audio";
}
else if(end.equals("mp4") || end.equals("3gp")) {
type = "video";
}
else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg") || end.equals("bmp") || end.equals("gif")){
type = "image";
}
else {
//如果无法直接打开,跳出列表由用户选择
type = "*";
}
type += "/*";
return type;
}
private void displayToast(String message){
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
自定义适配器:public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private Bitmap directory,file;
//存储文件名称
private ArrayList names = null;
//存储文件路径
private ArrayList paths = null;
//参数初始化
public MyAdapter(Context context,ArrayList na,ArrayList pa){
names = na;
paths = pa;
directory = BitmapFactory.decodeResource(context.getResources(),R.drawable.d);
file = BitmapFactory.decodeResource(context.getResources(),R.drawable.f);
//缩小图片
directory = small(directory,0.16f);
file = small(file,0.1f);
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return names.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (null == convertView){
convertView = inflater.inflate(R.layout.file, null);
holder = new ViewHolder();
holder.text = (TextView)convertView.findViewById(R.id.textView);
holder.image = (ImageView)convertView.findViewById(R.id.imageView);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
File f = new File(paths.get(position).toString());
if (names.get(position).equals("@1")){
holder.text.setText("/");
holder.image.setImageBitmap(directory);
}
else if (names.get(position).equals("@2")){
holder.text.setText("..");
holder.image.setImageBitmap(directory);
}
else{
holder.text.setText(f.getName());
if (f.isDirectory()){
holder.image.setImageBitmap(directory);
}
else if (f.isFile()){
holder.image.setImageBitmap(file);
}
else{
System.out.println(f.getName());
}
}
return convertView;
}
private class ViewHolder{
private TextView text;
private ImageView image;
}
private Bitmap small(Bitmap map,float num){
Matrix matrix = new Matrix();
matrix.postScale(num, num);
return Bitmap.createBitmap(map,0,0,map.getWidth(),map.getHeight(),matrix,true);
}
}
因为要对文件进行操作,所以在描述文件中授权:<?xml version="1.0" encoding="utf-8"?>
package="com.test.filemanager"
android:versionCode="1"
android:versionName="1.0">
android:label="@string/app_name">
运行结果如下:
查看目录文件
文件重命名:
删除文件:
打开文件:
希望本文所述对大家Android程序设计有所帮助。
更多Android开发之简单文件管理器实现方法相关文章请关注PHP中文网!
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
安卓打开java文件管理器_Android开发之简单文件管理器实现方法相关推荐
- 文件管理器android实现,Android开发之简单文件管理器实现方法
易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...
- java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)
java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...
- java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...
- java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...
- android开发是java语言吗_android开发是用java语言吗?
android开发的主流语言是java语言,但也可以使用其他语言,例可以通过Android NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程. Andro ...
- Java微信公众号开发之使用拦截器获取粉丝openID
目的 本次实现的目的是:在微信公众号项目中,可能在每次访问页面的时候需要带上openid或者授权,查数据库太耗性能.多次多个地方去调授权接口也不是最佳的方案,如果能利用拦截器拦截到每次请求访问后台,这 ...
- android 实现视频播放功能,android开发之简单视频播放器(VideoView)
简单视频播放器的使用 一.简单使用videoView和MediaController实现播放控制 1.添加需要的权限 2.设置布局 android:id="@+id/main_video&q ...
- android怎么监听多点触摸_Android开发中多点触摸的实现方法
Android多点触控需要LCD驱动和程序设计支持,其实我们只要采用电容屏触摸手机的技术即可,接下来,就让爱站技术频道小编来讲解Android开发中多点触摸的实现方法吧! 多点触摸技术在实际开发过程中 ...
- java安卓6.0闪退_Android开发activity跳转闪退
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 现在调试也是闪退 Java.lang.RuntimeException: Fail to connect to camera service at and ...
最新文章
- Linux服务器-使用mysql
- cr3格式怎么转换成jpg_怎么把JPG格式转换为PDF?
- SQL PL/SQL SQL*PLUS三者的区别
- 从客户端...中检测到有潜在危险的 Request.Form 值
- [译]Javascript中的闭包(closures)
- CF617E XOR and Favorite Number
- 编辑了基因,就能成为人生赢家?5本书给你答案
- 什么是Thymeleaf?
- Deploy a replica set
- spring boot设置http https端口
- JavaScript设计模式:四、发布订阅模式
- GO语言中中文占3个字节,英文占1个字节
- MT6573芯片资料集锦芯片MTK6573_环境搭建
- 设计模式(十四)中介者模式
- SIO_KEEPALIVE_VALS 用户异常掉线检测
- Oracle EBS R12 GL总帐模块 查询账户余额、发生额SQL
- 巴纳比·杰克和他发现的ATM取款和心脏起搏器漏洞
- 纽约大学坦顿学院计算机排名,纽约大学坦顿工程学院排名多少?
- 微粒体精致毕业论文答辩PPT模板
- 【原来那么简单/大数据】随随便便开发一个属于自己的搜索引擎
热门文章
- 数据分析的五大思维方式
- 群里又会python的吗_群聊太多?三步教你用 Python 自动监听转发群消息!
- 陨落之光 Light Fall for Mac 动作冒险游戏 中文破解版下载
- AJAX框架衣柜推拉门设计,自己diy动手四推拉门衣柜内部结构设计图纸
- 首选DNS服务器地址的分析与应用
- c语言指针详解 第38课
- sketchup模型【办公椅模型】
- 软件测试工程师【人事面】切勿大意失荆州!
- connecting dl.google.com dl-ssl.google.com超时
- 三星a9s参数_三星A9s参数配置怎么样