0

我正在尝试复制工作正常的文件夹和文件,但我需要有关如何过滤单个文件夹和复制其余文件夹的帮助。例如,我在(C:\vehicle\carsfolder 和 C:\vehicle\truckfolder)中有汽车文件夹和卡车文件夹等目录。当我使用下面的代码时,它会同时复制汽车文件夹和卡车文件夹,但我只想复制汽车文件夹。我怎样才能做到这一点。非常感谢您的帮助。(使用 Swing 和 Java 1.6)

 class CopyTask extends SwingWorker<Void, Integer>
                 {
                   private File source;
                   private File target;
                   private long totalBytes = 0;
                   private long copiedBytes = 0;
                   public CopyTask(File src, File dest)
                 {
                    this.source = src;
                    this.target = dest;
                    progressAll.setValue(0);

                  }
         @Override
         public Void doInBackground() throws Exception
                 {

                    ta.append("Retrieving info ... ");  //append to TextArea
                    retrieveTotalBytes(source);
                    ta.append("Done!\n");
                    copyFiles(source, target);
                    return null;
                 }
         @Override
       public void process(List<Integer> chunks)
              {
                for(int i : chunks)
              {
                         }
        }
         @Override
         public void done()
                    {
                      setProgress(100);
                      }
        private void retrieveTotalBytes(File sourceFile)
                    {
                    try
                    {
                      File[] files = sourceFile.listFiles();
                      for(File file : files)
                    {
                     if(file.isDirectory()) retrieveTotalBytes(file);
                     else totalBytes += file.length();
                     }
                  }
                 catch(Exception ee)
                   {
                                            }
               }
    private void copyFiles(File sourceFile, File targetFile) throws IOException
                   {
                     if(sourceFile.isDirectory())
                   {
         try{
                if(!targetFile.exists()) targetFile.mkdirs();
                String[] filePaths = sourceFile.list();
                for(String filePath : filePaths)
               {
                File srcFile = new File(sourceFile, filePath);
                File destFile = new File(targetFile, filePath);
                copyFiles(srcFile, destFile);
               }
          }
        catch(Exception ie)
              {
                                   }
         }
    else
             {
                try
                     {
                        ta.append("Copying " + sourceFile.getAbsolutePath() + " to " + targetFile.getAbsolutePath() );
                        bis = new BufferedInputStream(new FileInputStream(sourceFile));
                        bos = new BufferedOutputStream(new FileOutputStream(targetFile));
                        long fileBytes = sourceFile.length();
                        long soFar = 0;
                        int theByte;
             while((theByte = bis.read()) != -1)
                       {
                         bos.write(theByte);
                         setProgress((int) (copiedBytes++ * 100 / totalBytes));
                         publish((int) (soFar++ * 100 / fileBytes));
                       }
                          bis.close();
                          bos.close();
                          publish(100);
                          ta.append(" Done!\n");
                      }
           catch(Exception excep)
                            {
                              setProgress(0);
                              bos.flush();
                              bis.close();
                              bos.close();

                            }
          finally{
                    try {
                          bos.flush();
                        } 
                    catch (Exception e) {
                         }
                    try {
                            bis.close();
                        }
                    catch (Exception e) {
                        }
                   try {
                       bos.close();
                       } 
                   catch (Exception e) {
                    }
                }
}
}
}
4

1 回答 1

1

也许您可以引入一个正则表达式或正则表达式列表来指定要排除的文件和目录?

例如,要排除卡车文件夹,请使用“排除”正则表达式,如"C:\\vehicle\\truckfolder.*".

然后,在您的代码中,在复制任何内容之前,请检查以确保源文件的绝对路径与排除正则表达式不匹配。

于 2013-01-30T20:35:35.503 回答