Java列出目录中的文件

时间:2012-03-04 09:08:25

标签: java javascript applet directory subdirectory

我正在尝试获取目录中所有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()
}

3 个答案:

答案 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)

的原因