我的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

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


相关文章
|
4月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
153 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
8月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
242 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
8月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
753 19
|
11月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1165 83
|
8月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2215 2
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
367 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
369 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
817 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
630 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
3月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
209 0