iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >编程实现Android文件浏览器,实现文件与文件夹的访问
  • 761
分享到

编程实现Android文件浏览器,实现文件与文件夹的访问

浏览器Android 2022-06-06 13:06:43 761人浏览 安东尼
摘要

一、设计思路 此实验是要对系统文件进行操作,属于对外部存储的操作范围。主要功能实现部分就要用到Android File存储中对外部存储访问的相关

一、设计思路

此实验是要对系统文件进行操作,属于对外部存储的操作范围。主要功能实现部分就要用到Android
File存储中对外部存储访问的相关方法。要想获取系统文件目录,首先要调用Environment 的
getExternalStorageState() 方法来判读外部存储设备是否可用,这里可以用一个 if
语句来进行判断,如果外部存储设备可用(可读写),则Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)返回true,否则给出相应的提示信息。

二、实验过程

在MainActivity中,首先根据Environment.getExternalStorageState()方法判断外部存储是否可用,如果可用,获取外部存储的根目录,然后调用文件管理类FileMgr
的方法获取子文件列表,将文件列表设置到listView自定义的Adapter
中。在onCreate()方法中,对listview的item设置了单击的监听事件onItemClick(……),当item被单击后,用getItem()方法获取对应的文件对象。如果该文件属于文件夹,则用setText(rootFile.getAbsolutePath())方法的获取子目录,并调用Adapter的noifyDataSetChanged()方法刷新页面显示。其中自定义Adapter和文件管理类的代码如下的第5部分展示。
然后在FileMgr中,调用了File原生的listFiles()方法获取文件的子文件集合,只不过通过文件名对隐藏文件做了过滤。在返回结果之前,使用自定义的Comparator对文件集合做了排序。代码如下的第5部分展示
当然,还需搜集要用到的图标文件,放到drawabl文件目录下。

三、源代码 3.1布局文件

view_list_item.xml


    
    
3.2 java程序文件

MainActivity.java

package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.FileFilter;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private ListViewAdapter mAdapter;
    private TextView mTitle;
    private FileMgr fileMgr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //用于显示当前文本的路径
        mTitle=(TextView)findViewById(R.id.txt_view);
        //获取ListView控件
        ListView listView = (ListView) findViewById(R.id.list_view);
        //自定义的Adapter
        mAdapter = new ListViewAdapter(this);
        init();
        listView.setAdapter(mAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int pos, long id) {
                //获取当前单击的文件
                File file = mAdapter.getItem(pos);
                //更新显示下级目录
                change(file);
            }
        });
    }
    private void init() {
        fileMgr = new FileMgr();
        //判断外部存储是否可用
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            Toast.makeText(this, "the external storage is not avaliable", Toast.LENGTH_SHORT).show();
            return;
        }
        File rootFile = Environment.getExternalStorageDirectory();
        mTitle.setText(rootFile.getAbsolutePath());
        //获取当前目录的子文件列表
        List files = fileMgr.getSubFiles(rootFile);
        mAdapter.updateFiles(files);
    }
    private void change(File file) {
        if (!file.isDirectory()) {
            return;
        }
        //更新路径的显示
        mTitle.setText(file.getAbsolutePath());
        //获取新的文件列表
        List files = fileMgr.getSubFiles(file);
        //更新文件和视图显示
        mAdapter.updateFiles(files);
        mAdapter.notifyDataSetChanged();
    }
}

ListViewAdapter.java

package com.example.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class ListViewAdapter extends BaseAdapter {
    private LayoutInflater flater;
    private ListmDatas;
    public ListViewAdapter(Context context) {
        flater = LayoutInflater.from(context);
        mDatas = new ArrayList();
    }
    public void updateFiles(List files) {
        mDatas.clear();
        mDatas.addAll(files);
    }
    public int getCount() {
        return (null == mDatas || mDatas.isEmpty()) ? 0 : mDatas.size();
    }
    @Override
    public File getItem(int pos) {
        if (null != mDatas && pos < mDatas.size()) {
            return mDatas.get(pos);
        }
        return null;
    }
    @Override
    public long getItemId(int position) {
        return 0;
    }
    @Override
    public View getView(int position,View convertView, ViewGroup parent) {
        if (null == convertView) {
            //为每一个子项加载布局
            convertView = flater.inflate(R.layout.view_list_item, null);
        }
        //获取 item 布局文件中的控件
        ImageView imageView = (ImageView) convertView.findViewById(R.id.lvew_img);
        TextView txtTitle = (TextView) convertView.findViewById(R.id.lview_title);
        File file = getItem(position);//根据position获取数据
        if (null!=file) {
            imageView.setImageResource(file.isDirectory() ? R.drawable.folder : R.drawable.file);
            txtTitle.setText(file.getName());
        }
        return convertView;
    }
}

FileMgr.java

package com.example.myapplication;
import java.io.File;
import java.io.FilenameFilter;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class FileMgr {
    public List getSubFiles(File file) {
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File f, String name) {
                return !name.startsWith(".");
            }
        });
        System.out.println("file:" + (null == files));
        if (null != files) {
            System.out.println("file mgr length:" + files.length);
        }
        List result = Arrays.asList(files);
        Collections.sort(result, new CustomFileComparator());
        return result;
    }
}

CustomFileComparator.java

package com.example.myapplication;
import java.io.File;
import java.util.Comparator;
public class CustomFileComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        File file1 = (File) o1;
        File file2 = (File) o2;
        if (file1.isDirectory()) {
            if (file2.isFile()) {
                return -1;
            }
            return file1.getName().compareTo(file2.getName());
        }
        if (file2.isDirectory()) {
            return 1;
        }
        return file1.getName().compareTo(file2.getName());
    }
}

案例代码资源:Http://download.csdn.net/download/weixin_43624626/12352857

四、最终实现效果

点击运行生成的app , 界面如下:
在这里插入图片描述
点击Pictures 文件夹,显示如下:
在这里插入图片描述
点击 cache 文件夹,显示如下:
在这里插入图片描述


作者:Sunqk5665


--结束END--

本文标题: 编程实现Android文件浏览器,实现文件与文件夹的访问

本文链接: https://www.lsjlt.com/news/29600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 实现浏览器下载文件及文件预览
    插曲想记录一下,以后可以来粘贴复制用。 一、浏览器下载文件 setContentType() 该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。 没有缓存 resp...
    99+
    2024-04-02
  • Java实现文件及文件夹的删除
    本文实例为大家分享了Java实现文件及文件夹的删除,供大家参考,具体内容如下 1、删除单个文件 public static boolean deleteFile(String fil...
    99+
    2024-04-02
  • Win10利用bat文件实现文件与文件夹批量重命名的实践
    目录bat文件批量重命名文件夹批量重命名文件后记bat文件 利用Win10的bat文件能够实现垃圾清理、电脑关机等。同样的,使用Win的bat文件能够实现文件与文件夹的批量重命名,这...
    99+
    2024-04-02
  • hadoop如何实现文件夹文件的创建与删除
    小编给大家分享一下hadoop如何实现文件夹文件的创建与删除,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!package hadoop.test;imp...
    99+
    2023-06-02
  • php如何实现文件夹上传文件
    这篇“php如何实现文件夹上传文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现文件夹上传文件”文章吧。一、什...
    99+
    2023-07-05
  • golang实现浏览器导出excel文件功能
    目录1.依赖包2.示例3.分析3.1先根据需求查询需要的list对象3.2新建文件,设置文件名,跟列名3.3设置标题单元格3.4设置内容单元格3.5流媒体返回web1.依赖包 imp...
    99+
    2024-04-02
  • Sublime怎么实现html文件浏览器更新
    这篇文章主要讲解了“Sublime怎么实现html文件浏览器更新”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Sublime怎么实现html文件浏览器更新”...
    99+
    2024-04-02
  • 基于Python实现交互式文件浏览器
    目录引子应用场景源代码源代码说明效果如下所示引子 在许多应用程序中,需要方便地查看特定文件夹中的所有图片,例如图库管理器、相册应用程序、图片编辑器等。如果手动浏览文件夹并查看每个文件...
    99+
    2023-05-18
    Python实现交互式文件浏览器 Python实现文件浏览器 Python文件浏览器 Python文件浏览
  • Python使用sftp实现传文件夹和文件
    利用python的sftp实现文件上传,可以是文件,也可以是文件夹。 版本Python2.7.13 应该不用pip安装更多的插件,都是自带的 不多说 上代码 # -*- codi...
    99+
    2024-04-02
  • Python实现文件及文件夹操作大全
    目录一、文件操作1.1 文件常规操作1.2 文件读写1.3 文件相关属性访问二、文件夹操作2.1 文件夹常规操作2.2 遍历文件夹2.3 文件夹相关属性访问三、其他相关操作3.1 工...
    99+
    2024-04-02
  • Python实现遍历读取文件或文件夹
    目录例子os.listdiros.walk遍历读取代码搞机器学习或者深度学习算法很多时候需要遍历某个目录读取文件,特别是经常需要读取某个特定后缀的文件,比如图片的话可能需要读取jpg...
    99+
    2024-04-02
  • Java 实现文件复制及文件夹复制
    在Java中,有多种方法可以实现文件的复制。以下是几种常用的方式: 使用字节流进行复制: 通过FileInputStream和FileOutputStream分别创建源文件和目标文件的输入输出流,然后通过循环读取源文件内容,并将数据写入目标...
    99+
    2023-09-26
    java 开发语言
  • HTML5拖拽文件到浏览器并实现文件上传下载功能
    本篇内容主要讲解“HTML5拖拽文件到浏览器并实现文件上传下载功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5拖拽文件到浏览器并实现文件上传下载功能...
    99+
    2024-04-02
  • python实现自动清理文件夹旧文件
    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 由于程序一直在不停地存图,因此需要监测图片文件夹的大小,一旦超过指定大小则删除一部分最早的图片。...
    99+
    2024-04-02
  • Java的IO流实现文件和文件夹的复制
    本文实例为大家分享了Java的IO流实现文件和文件夹复制的具体代码,供大家参考,具体内容如下 1、使用文件流对单个文件进行复制 将某个文件复制到指定的路径下: //复制文件 publ...
    99+
    2024-04-02
  • Java实现浏览器端大文件分片上传
    目录背景介绍 项目介绍 需要知识点 启动项目 项目示范 核心讲解核心原理 功能分析分块上传 秒传功能 断点续传 总结 参考文献 背景介绍   Breakpo...
    99+
    2024-04-02
  • Android socket如何实现文件列表动态访问
    目录idea服务端更新安卓端更新 idea服务端更新 为了防止代码量上升可能带来的结构杂乱,我们对服务端架构进行优化,server包负责socket服务基础实现,data包负责处理...
    99+
    2024-04-02
  • Java 如何实现解压缩文件和文件夹
    目录一 前言 二 压缩文件 2.1 压缩多个文件 2.2 压缩文件或文件树 2.3 借助文件访问器压缩 三 解压文件 四 总结 一 前言 项目开发中,总会遇到解压缩文件的时候。比如...
    99+
    2024-04-02
  • Android实现文件下载
    前言 总体思路:下载文件到应用缓存路径,在相册创建文件夹,Copy过去,通知相册刷新。 下载文件到APP缓存路径,这样可避免Android高版本读取本地权限问题, 准备 impl...
    99+
    2024-04-02
  • Python实现遍历包含大量文件的文件夹
    在处理大模型的训练数据时,经常需要遍历大型文件夹,其中,可能包括数千万或数亿个文件,这时,一般的Python遍历函数就会非常慢,例如os.walk、glob、path.rglob等等...
    99+
    2023-05-15
    Python实现遍历文件夹 Python遍历文件夹 Python 文件夹
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作