我正在尝试获取目录中所有mp3文件的列表(applet目录中名为music的子目录),这样我就可以在JavaScript函数中将它们的名称推送到数组中。
一切正常,但列表过程......它只返回目录中的第一个mp3文件,而不是其他的......
这是我的代码
JAVA:
import java.applet.Applet;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
public class Main extends Applet {
private static final long serialVersionUID = 1L;
public void init() {
File[] lib = getFiles(new File((getCodeBase() + File.separator + "music").substring(6)));
for (File s:lib) {
if (s.getName().substring(s.getName().length() - 3).equalsIgnoreCase("mp3")) {
try {getAppletContext().showDocument(new URL("javascript:addSong('"+s.getName()+"')"));}
catch (MalformedURLException me) {}
}
}
try {getAppletContext().showDocument(new URL("javascript:init()"));}
catch (MalformedURLException me) {}
}
public File[] getFiles(File dir) {
return dir.listFiles();
}
}
JavaScript的:
function addSong(s) {
// Adding to array
window.songs.push("music/" + s);
// Debug message
alert(s);
}
function init() {
// Random code to initialze music player
// getting and listing values from "songs" which got content form addSong()
}
答案 0 :(得分:1)
要列出(递归地)给定目录中的所有文件(扩展名为.mp3),我有以下代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FileLister {
private List<File> getFileList(File startingDir) throws FileNotFoundException {
List<File> result = new ArrayList<File>();
File[] filesAndDirs = startingDir.listFiles();
List<File> filesDirs = Arrays.asList(filesAndDirs);
for (File file : filesDirs) {
result.add(file);
if (!file.isFile()) {
List<File> deeperList = getFileList(file);
result.addAll(deeperList);
}
}
return result;
}
public static void main(String[] args) throws FileNotFoundException {
for(File file : new FileLister().getFileList(new File("D:\\Music"))){
if(file.getName().contains(".")) {
String extension = file.getName().substring(file.getName().lastIndexOf("."), file.getName().length());
if(extension.equalsIgnoreCase(".mp3")) {
System.out.println(file.getName());
}
}
}
}
}
答案 1 :(得分:1)
我对您的代码进行了细微更改。看看这个。这应该可以解决您的问题:
import java.applet.Applet;
import java.io.File;
import java.io.FilenameFilter;
import java.net.MalformedURLException;
import java.net.URL;
public class Main extends Applet {
private static final long serialVersionUID = 1L;
@Override
public void init() {
File[] lib = getMP3Files("E:/Music/BollywoodMusic"); // pass your directory name here
for(File s:lib) {
try { getAppletContext().showDocument(new URL("javascript:addSong('"+s.getName()+"')")); } catch(MalformedURLException me) {}
}
try {getAppletContext().showDocument(new URL("javascript:init()"));}
catch (MalformedURLException me) {}
}
public static File[] getMP3Files(String directoryName) {
File directory = new File(directoryName);
return directory.listFiles(new FilenameFilter() {
public boolean accept(File directory, String fileName) {
return fileName.endsWith(".mp3"); } });
}
}
答案 2 :(得分:0)
我尝试了你的代码(在eclipse上)并且工作正常,请确保你把文件放在正确的目录中
我无法理解您使用.substring(6)