我想比较我的arraylist中FileVisitResult visitFile
捕获的文件路径。这种比较的原因是防止了arraylist中存在重复的文件路径存储,因为FileVisitResult visitFile
将在条件为真时继续循环。我想确保该方法刚刚访问过所有文件。因此,每次FileVisitResult
方法捕获文件路径并存储到arraylist时,当方法执行的下一轮时,检测到的任何新文件路径将与arraylist中的文件路径进行比较,但它是我在网上搜索一些信息后仍然没有做到,Thread.sleep()
用来停止程序以便我理解我的源代码流程
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
String f;
File file1;
Path tempPath1,tempPath2;
if(counter == 0) //first round for the execution
{
counter++;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("The abs path of the file is"+file);
y2j.add(file); //add path to arraylist
f = file.toString();
file1 = new File(f);
if ( file1.exists()) //checking the file process whether still consume by any other process
{
RandomAccessFile statusCheck = null;
try
{
statusCheck = new RandomAccessFile(file1,"r");
if(statusCheck != null)
{
System.out.println("Not hodling by any process,clear to send for scanning");
statusCheck.close();
ambrose(); //do something in this method
}
}
catch(Exception e)
{
System.out.println("In processing : " + e.getMessage());
}
}
}
else if(counter > 0) //after first round of execution
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("larger than 0");
System.out.println("The abs path of the file is"+file);
for(int i = 0 ; i<y2j.size()-1;i--)
{
System.out.println("In the for loop" +y2j);
for(int k = i+1 ; k<y2j.size();k++)
{
if(file == y2j.get(k))
{
System.out.println("they are same");
}
else if(file != y2j.get(k))
{
y2j.add(file); //add path to arraylist
ambrose(); //do something in this method
}
}
}
}
return FileVisitResult.CONTINUE;
}
The abs path of the file isC:\REST API\source\abc\abc.xlsx
Not hodling by any process,clear to send for scanning
Dirty deed here
larger than 0
The abs path of the file isC:\REST API\source\abc\def.txt
larger than 0
The abs path of the file isC:\REST API\source\abc\abc.xlsx
larger than 0
The abs path of the file isC:\REST API\source\abc\def.txt
它看起来好像没有进入for循环,我花了一些时间在它上面,但无法确定我的问题在哪里。
答案 0 :(得分:1)
而不是file == y2j.get(i)
使用equals
方法。此外,您可以使用方法contains
而不是遍历整个列表,如果列表包含元素,则返回true。
==
通过比较引用来比较它是否是同一个对象,但是它不会区分看起来相同但不相同的对象,例如:new String("n") == new String("n")
将返回false。 / p>
答案 1 :(得分:0)
如果您需要不同的文件路径集,则可以使用设置代替列表。如果您使用设置,那么您不必再运行额外的循环来删除重复项。