将值与arraylist中的值进行比较

时间:2017-05-12 03:57:56

标签: java arraylist

我想比较我的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循环,我花了一些时间在它上面,但无法确定我的问题在哪里。

2 个答案:

答案 0 :(得分:1)

而不是file == y2j.get(i)使用equals方法。此外,您可以使用方法contains而不是遍历整个列表,如果列表包含元素,则返回true。

java中的

==通过比较引用来比较它是否是同一个对象,但是它不会区分看起来相同但不相同的对象,例如:new String("n") == new String("n")将返回false。 / p>

答案 1 :(得分:0)

如果您需要不同的文件路径集,则可以使用设置代替列表。如果您使用设置,那么您不必再运行额外的循环来删除重复项。