2012-03-04 107 views
1

我试图获取目录中的所有mp3文件的列表(在applet目录中名为music的子目录),以便我可以在JavaScript函数中将它们的名称推入数组。Java在目录中列出文件

一切正常,但在上市过程......它只返回第一个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

也许显示addSong呢? – mplungjan 2012-03-04 09:13:15

+0

新增javascript – 2012-03-04 09:23:59

+3

您是否曾尝试从另一个主机执行此applet,而不是提供此applet的主机?您无法使用'new File()'访问服务器上的文件。 – 2012-03-04 09:43:37

回答

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

这不适用于实时服务器。 '文件'对象***总是***指向客户端文件系统。 – 2012-03-04 09:50:34

+0

@AndrewThompson谢谢。这是我不知道的。我已经投了票。无论如何列出服务器的文件? – 2012-03-04 10:04:33

+0

谢谢小吃!它工作完美。 – 2012-03-04 10:06:44

0

我想你的代码(基于Eclipse),它工作正常,要确保ü推杆的文件在正确的目录

,我不能明白为什么ü在一个给定的目录使用.substring(6)

+0

这不适用于实时服务器。 '文件'对象***总是***指向客户端文件系统。 – 2012-03-04 09:50:24

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"); } }); 
    } 

}