比较HastSet

时间:2017-05-12 09:59:29

标签: java

我的父目录中有三个文件是

c:/test/abc.png
c:/test/gibby.png
c:/test/cisco.doc

FileVisitResult将访问我的父目录以查找保留在目录中的所有文件,它将以完整路径获取文件并将其发送到我的subfunction类以进行进一步处理。但我发现cisco.doc已经两次发送到subfunction课程。如果文件数量开始增长,则会出现问题。

这是我的源代码

            while(true)
            {
                        try {
                            Files.walkFileTree(ParentDir, new FileVisitor<Path>()
                                    {

                                        @Override
                                        public FileVisitResult postVisitDirectory(Path sub, IOException exc) throws IOException
                                        {
                                              return FileVisitResult.CONTINUE;
                                        }

                                        @Override
                                        public FileVisitResult preVisitDirectory(Path sub, BasicFileAttributes attrs) throws IOException 
                                        {
                                            return FileVisitResult.CONTINUE;
                                        }

                                        @Override
                                        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException 
                                        {
                                            Path tempPath1;
                                            System.out.println("@The abs path of the file is"+file);
                                            java.util.Iterator<Path> it = MyFileList.iterator();
                                            while(it.hasNext())
                                            {
                                                tempPath1 = it.next();
                                                if(tempPath1 == null)  //first round
                                                {
                                                    System.out.println("empty list");
                                                    MyFileList.add(file);
                                                }
                                                else if(tempPath1 == file) //after first round
                                                {
                                                    System.out.println("same in the list : "+file);
                                                }
                                                else if(tempPath1 != file) //after first round
                                                {
                                                    System.out.println("not same in the list : "+file); 
                                                    x = true;
                                                }

                                            }
                                            System.out.println(x);
                                            if(x = true)
                                            {
                                                MyFileList.add(file);
                                                subfunction sb1 = new subfunction ();
                                                sb1.send(file);
                                            }

                                            return FileVisitResult.CONTINUE;
                                        }

                                        @Override
                                        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException 
                                        {
                                            return FileVisitResult.CONTINUE;
                                        }

                                    });
                        } 
                        catch (IOException e) 
                        {

                            e.printStackTrace();
                        }
            }



如您所见,有while循环检查条件,如果条件为真,FileVisitResult将开始遍历我的父目录并选择文件路径,我将文件路径存储到HashSetsend()将发送到我的subfunction课程。我将文件路径存储到HashSet中的原因是用于比较FileVisitResult发现的新文件路径和存储在HashSet内的先前发现的路径,以避免传递给{的任何重复文件路径{1}}但它没有按预期工作

1)如何确保每个文件路径只传递到send()一次?

2)确保send()只发现一次文件并且在第二次迭代期间不会回复同一文件的任何想法

0 个答案:

没有答案