我有这部分代码:
public static void delete(File f) throws IOException
{
if (f.isDirectory())
{
for (File c : f.listFiles())
{
delete(c);
}
}
else if (!f.delete())
{
throw new FileNotFoundException("Failed to delete file: " + f);
}
}
public static void traverseDelete(File directory) throws FileNotFoundException, InterruptedException
{
//Get all files in directory
File[] files = directory.listFiles();
for (File file : files)
{
if (file.getName().equalsIgnoreCase("word"))
{
boolean containsMedia = false;
File[] filesInWordFolder = file.listFiles();
for ( File file2 : filesInWordFolder )
{
if ( file2.getName().contains("media"))
{
containsMedia = true;
break;
}
}
if (containsMedia == false)
{
try
{
delete(file.getParentFile());
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
else if (file.isDirectory())
{
traverseDelete(file);
}
}
}
对于缺乏评论感到抱歉,但我认为这是不言自明的。基本上代码应该做的是遍历给定目录中的一组文件,如果它遇到名为“word”的目录,那么它应该列出word的内容,然后如果名为“media”的目录不是存在,递归删除“word”的父目录中的所有内容。
我主要担心的是这个条件:
if(!filesInWordFolder.toString().contains("media"))
这是说出该数组中的文件是否包含“image”实例的正确方法,请继续并删除?
答案 0 :(得分:1)
那不行。
File[] filesInWordFolder = file.listFiles();
if(!filesInWordFolder.toString().contains("media"))
将为您提供File数组的字符串表示形式 - 通常会有一个引用。
您必须遍历这些文件,以查明其中是否包含单词media。
boolean containsMedia = false;
for ( File file : filesInWordFolder ) {
if ( file.getName().contains("media") ){
containsMedia = true;
break;
}
// now check your boolean
if ( !containsMedia ) {
答案 1 :(得分:0)
使用toString()
,将为您提供文件的字符串表示形式(在本例中为文件)。 String表示应包含文件名。如果您的目的是检查目录中包含“media”一词的文件的任何实例,那么您没问题。
在示例中,您将打印File数组的String表示形式。相反,您应该遍历File数组并检查每个文件的String表示,如下所示:
for (int i = 0; i < file_array.length; i++) {
if ((File)file_array[i]).toString().equals("your_search_term")) {
// The file contains your search term
} else {
// Doesn't contain the search term.
}
}