我正在编写一个简单的应用程序,该应用程序从用户指定的文件位置读取,并对它在那里找到的.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;
}
任何帮助/提示都非常感谢。
答案 0 :(得分:2)
您在if (Files.isDirectory(file))
错过了感叹号。
应为if (!Files.isDirectory(file))