我之前从未使用过枚举。所以请耐心等待我一点。
应用背景:
我创建了一个应用程序,用户可以从外部存储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中具有与视频类似扩展名的文件
我的Qustion是:
我试图通过使用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;
}
}
现在我如何实际选择所有具有所选类别扩展名的文件?
我该如何使用枚举?
我不是要求代码,虽然任何帮助材料都会受到赞赏 - 我只需要明确这个概念。
谢谢
答案 0 :(得分:2)
这是一个很棒的讲座:Google I/O 2008 lecture (Effective Java Reloaded)
Enum
部分位于here左右
由于视频的质量很差,这里是slides。
https://sites.google.com/site/io/effective-java-reloaded
答案 1 :(得分:1)
您可能希望在代码中的某处创建EnumMap,其中Media_source
为关键字,Set<String>
个扩展名为值。然后,您可以使用该映射来检索媒体类型的适当扩展名
答案 2 :(得分:1)
“然后我有一个Source类来检查选择了哪个类别。” - 我没有看到任何代码检查Enum
的类型。
这就是我使用Enums
的方式,你可以做类似的事情。
声明你的枚举:
public enum Media {
IMAGE, VIDEO, AUDIO;
}
创建一个以enum作为参数的方法:
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 Docs中有一个类似的例子。