我以前从未使用过枚举。所以请对我耐心一点。
应用程序背景:
我创建了一个应用程序,用户可以在其中从外部存储USB设备添加三种类型的源,*music*
、*video*
和*pictures*
用户在usd驱动器上选择一个文件夹并将其添加到源中,然后为其添加一个类别。
THIS HAS BEEN DONE
问题是
现在我正在尝试从文件夹中读取所有文件,该文件夹具有特定的扩展名,按类别定义。
以下是将存储在xml文件中的三个类别的扩展名
<?xml version="1.0" encoding="UTF-8"?>
<Picture>
<ext>jpg</ext>
<ext>png</ext>
<ext>gif</ext>
<ext>jpeg</ext>
<ext>pdf</ext>
<ext>pcd</ext>
<ext>jpx</ext>
<ext>tif</ext>
</Picture>
<Videos>
<ext>mpeg</ext>
<ext>mpg</ext>
<ext>mpe</ext>
<ext>mpeg-1</ext>
<ext>mpeg-2</ext>
<ext>mp4</ext>
<ext>mpa</ext>
<ext>wmv</ext>
<ext>wma</ext>
<ext>wmx</ext>
<ext>rm</ext>
<ext>ra</ext>
<ext>3gp</ext>
</Videos>
<Music>
<ext>mp3</ext>
<ext>wav</ext>
<ext>dct</ext>
<ext>gsm</ext>
<ext>flac</ext>
<ext>au</ext>
<ext>ogg</ext>
<ext>raw</ext>
<ext>wma</ext>
<ext>msv</ext>
</Music>
因此,例如,如果用户选择了视频类别,我将读取所有扩展名与我的xml 中的视频类似的文件
我的问题是:
我正试图使用ENUM来完成这件事,我知道我也可以使用简单的if/else语句来完成,但我需要知道ENUM将如何工作。
我已经创建了一个定义了类别的媒体源枚举
这是代码:
public enum Media_source {
Pitures("P"), Videos("V"), Music("M");
private String statusCode;
private Media_source(String s) {
statusCode = s;
}
public String get_media_source() {
return statusCode;
}
}
然后我有一个Source类,它检查选择了哪个类别。
public class Source {
public static String source_path;
public static String source_name;
Media_source mSource;
public static void main(String[] args) {
System.out.println(Media_source.Pitures.get_media_source());
}
public Source(String name, String path) {
Source.source_name = name;
Source.source_path = path;
}
public static String getSource_path() {
return source_path;
}
public static void setSource_path(String source_path) {
Source.source_path = source_path;
}
public static String getSource_name() {
return source_name;
}
public static void setSource_name(String source_name) {
Source.source_name = source_name;
}
}
现在,我如何实际选择所选类别的所有扩展名文件
我应该如何使用枚举?
我不是在要求代码,尽管任何有帮助的材料都会很感激——我只需要把概念弄清楚。
谢谢
这是一个很棒的讲座:Google I/O 2008讲座(有效的Java重新加载)Enum
部分就在这里
由于视频质量很差,下面是幻灯片。https://sites.google.com/site/io/effective-java-reloaded
">然后我有一个Source类来检查选择了哪个类别。"-我没有看到任何代码检查Enum
的类型。
这就是我使用Enums
的方式,你可以做类似的事情。
声明您的枚举:
public enum Media {
IMAGE, VIDEO, AUDIO;
}
创建一个以枚举为参数的方法:
public selectStuff(Media m) {
switch(m) {
case IMAGE:
//Do image stuff
break;
case VIDEO:
//Do video stuff
break;
case AUDIO:
//Do audio stuff
break;
default:
break;
}
}
这就是你使用它的方式:
selectMedia(Media.IMAGE);
Oracle文档中也有类似的示例。
您可能希望在代码中的某个位置创建一个EnumMap,将Media_source
作为键,将扩展的Set<String>
作为值。然后使用该映射检索介质类型的适当扩展