字符串的空ArrayList

时间:2014-12-11 14:37:06

标签: java string arraylist

我正在编写一个简单的应用程序,该应用程序从用户指定的文件位置读取,并对它在那里找到的.mp3文件执行操作。我有一个名为getMusicFilenames的方法(下面),它应该转到路径,查看每个文件,如果文件名以.mp3结尾,则将其添加到ArrayList<String>,然后返回列表结束。

    public static List<String> getMusicFilenames(Path p) {
    List<String> listOfMusic = new ArrayList<>();

    try (DirectoryStream<Path> stream = Files.newDirectoryStream(p)) {
        for (Path file : stream) {
            if (Files.isDirectory(file)) {
                if (M3UFinder.isMusicFile(file.toString())) {
                    listOfMusic.add(file.toString());
                }
            } 

        }
    } catch (Exception e) {
        System.err.println("getMusicFilenames:: error with path "
                + p + ": " + e.getMessage());
    }

    return listOfMusic;
}

isMusicFile方法非常简单,但它可能是相关的:

    public static boolean isMusicFile(String thisFilename) {
    return thisFilename.endsWith(".mp3");
}

在使用JUnit测试此方法时,我将测试路径设置为查看仅包含一个.mp3文件的一个特定路径,但测试失败说&#34;期望&lt; [songtitle.mp3]&gt;但是:&lt; []&gt;。显然,它要么不读取文件存在,要么正在阅读它而不是将其添加到列表中。无论哪种方式,列表都返回空,这会导致我编写的其他方法出现问题,这些方法都依赖于列表中包含大小和内容的内容。我是否只是犯了一些我无法看到自己的错误?如果它有助于显示我出错的地方,getMusicFilenames方法改编自我提供的类似方法,如下所示。

    public static List<String> getPlaylistFilenames(Path p) {
    List<String> listOfPlaylists = new ArrayList<>();

    try (DirectoryStream<Path> stream = Files.newDirectoryStream(p)) {
        for (Path file : stream) {
            if (Files.isDirectory(file, LinkOption.NOFOLLOW_LINKS)) {
                listOfPlaylists.addAll(getPlaylistFilenames(file));
            } else if (M3UReader.isValidHeader(file.toString())) {
                listOfPlaylists.add(file.toString());
            }
        }
    } catch (Exception e) {
        System.err.println("getPlaylistFilenames:: error with path "
                + p + ": " + e.getMessage());
    }

    return listOfPlaylists;
}

任何帮助/提示都非常感谢。

1 个答案:

答案 0 :(得分:2)

您在if (Files.isDirectory(file))错过了感叹号。

应为if (!Files.isDirectory(file))