我的Android进阶之旅------>Android使用正则表达式匹配扫描指定目录下的所有媒体文件(音乐、图像、视频文件)

简介:       今天使用正则表达式匹配指定目录下的所有媒体文件,下面将这份代码简化了,可以收藏下来,当作工具类。 package match;import java.

     

今天使用正则表达式匹配指定目录下的所有媒体文件,下面将这份代码简化了,可以收藏下来,当作工具类。

package match;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Utils {
	/**
	 * 遍历指定文件夹下的资源文件
	 * @param folder 文件
	 */
	public static void simpleScanning(File folder) {
		//指定正则表达式
		Pattern mPattern = Pattern.compile("([^\\.]*)\\.([^\\.]*)");
		// 当前目录下的所有文件
		final String[] filenames = folder.list();
		// 当前目录的名称
		//final String folderName = folder.getName();
		// 当前目录的绝对路径
		//final String folderPath = folder.getAbsolutePath();
		if (filenames != null) {
			// 遍历当前目录下的所有文件
			for (String name : filenames) {
				File file = new File(folder, name);
				// 如果是文件夹则继续递归当前方法
				if (file.isDirectory()) {
					simpleScanning(file);
				} 
				// 如果是文件则对文件进行相关操作
				else {
					Matcher matcher = mPattern.matcher(name);
					if (matcher.matches()) {
						// 文件名称
						String fileName = matcher.group(1);
						// 文件后缀
						String fileExtension = matcher.group(2);
						// 文件路径
						String filePath = file.getAbsolutePath();
						
						if (Utils.isMusic(fileExtension)) {
							// 初始化音乐文件......................
							System.out.println("This file is Music File,fileName="+fileName+"."
									+fileExtension+",filePath="+filePath);
						}
						
						if (Utils.isPhoto(fileExtension)) {
							// 初始化图片文件......................
							System.out.println("This file is Photo File,fileName="+fileName+"."
									+fileExtension+",filePath="+filePath);
						}
						
						if (Utils.isVideo(fileExtension)) {
							// 初始化视频文件......................
							System.out.println("This file is Video File,fileName="+fileName+"."
									+fileExtension+",filePath="+filePath);
						}
					}
				}
			}
		}
	}
	/**
	 * 判断是否是音乐文件
	 * @param extension 后缀名
	 * @return
	 */
	public static boolean isMusic(String extension) {
		if (extension == null)
			return false;

		final String ext = extension.toLowerCase();
		if (ext.equals("mp3") || ext.equals("m4a") || ext.equals("wav") || ext.equals("amr") || ext.equals("awb") || 
				ext.equals("aac") || ext.equals("flac") || ext.equals("mid") || ext.equals("midi") || 
				ext.equals("xmf") || ext.equals("rtttl") || ext.equals("rtx") || ext.equals("ota") || 
				ext.equals("wma") ||ext.equals("ra") || ext.equals("mka") || ext.equals("m3u") || ext.equals("pls")) {
			return true;
		}
		return false;
	}
	/**
	 * 判断是否是图像文件
	 * @param extension 后缀名
	 * @return
	 */
	public static boolean isPhoto(String extension) {
		if (extension == null)
			return false;

		final String ext = extension.toLowerCase();
		if (ext.endsWith("jpg") || ext.endsWith("jpeg") || ext.endsWith("gif") || ext.endsWith("png") || 
				ext.endsWith("bmp") || ext.endsWith("wbmp")) {
			return true;
		}
		return false;
	}
	/**
	 * 判断是否是视频文件
	 * @param extension 后缀名
	 * @return
	 */
	public static boolean isVideo(String extension) {
		if (extension == null)
			return false;

		final String ext = extension.toLowerCase();
		if (ext.endsWith("mpeg") || ext.endsWith("mp4") || ext.endsWith("mov") || ext.endsWith("m4v") || 
				ext.endsWith("3gp") || ext.endsWith("3gpp") || ext.endsWith("3g2") || 
				ext.endsWith("3gpp2") || ext.endsWith("avi") || ext.endsWith("divx") || 
				ext.endsWith("wmv") || ext.endsWith("asf") || ext.endsWith("flv") || 
				ext.endsWith("mkv") || ext.endsWith("mpg") || ext.endsWith("rmvb") ||
				ext.endsWith("rm") || ext.endsWith("vob") || ext.endsWith("f4v")) {
			return true;
		}
		return false;
	}
}


下面使用该工具类进行测试指定的路径:/home/ouyangpeng/justForTest

当前路径下放了一些测试文件,如下图所示:



package match;

import java.io.File;

public class Test{
	public static void main(String[] args) {
		String path="/home/ouyangpeng/justForTest";
		File file = new File(path);
		if (file==null) {
			System.out.println("file does not exist");
		}else{
			Utils.simpleScanning(file);
		}
	}
}

打印的结果如下所示:

This file is Video File,fileName=Love Is Lost (Remix Version) 高清(360P).mp4,filePath=/home/ouyangpeng/justForTest/Love Is Lost (Remix Version) 高清(360P).mp4
This file is Video File,fileName=URATA NAOYA (AAA) _LIVE 高清(360P).mp4,filePath=/home/ouyangpeng/justForTest/URATA NAOYA (AAA) _LIVE 高清(360P).mp4
This file is Music File,fileName=K歌之王.mp3,filePath=/home/ouyangpeng/justForTest/K歌之王.mp3
This file is Photo File,fileName=507e4c75a6e64.jpg,filePath=/home/ouyangpeng/justForTest/507e4c75a6e64.jpg
This file is Video File,fileName=a.mp4,filePath=/home/ouyangpeng/justForTest/a.mp4
This file is Video File,fileName=Do You Feel Me (专辑封面拍摄花絮) 高清(360P).mp4,filePath=/home/ouyangpeng/justForTest/Do You Feel Me (专辑封面拍摄花絮) 高清(360P).mp4



ps:将上面的代码稍作修改,就能使用合适的适配器做一个文件管理器将视频、音乐、图像文件都显示出来




====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

===================================================================================


相关文章
|
2月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
4月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
293 1
|
2月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
130 0
|
4月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
124 0
|
11天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
16天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
18天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
20天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。