繁体   English   中英

根据文件名在文件夹之间移动文件

[英]Moving files between folders based on file name

我尝试了一些代码以优先级将文件从一个文件夹移动到另一个文件夹(具有相同名称的文件应首先移动)。

    String choice1="WTDocument";
    String choice2="OEM-Document";
    ArrayList<File> insertOrder1=new ArrayList<File>();
    ArrayList<File> insertOrder2=new ArrayList<File>();
    ArrayList<File> insertOrder3=new ArrayList<File>();

    String baseDir="D:\\vignesh\\MoveFolder";
    String destDir="D:\\vignesh\\MoveFolder\\testFolder";
    File initialLocation=new File(baseDir);


    for(File fileToMove:initialLocation.listFiles()){
        String fileName=fileToMove.getName();
        if(fileToMove.getName().endsWith(".jar")){
        if(fileName.contains(choice1)){
            insertOrder1.add(fileToMove);
        }
        else if(fileName.contains(choice2)){
            insertOrder2.add(fileToMove);
        }
        else{
            insertOrder3.add(fileToMove);
        }
    }
    }
    insertOrder1.addAll(insertOrder2);
    insertOrder1.addAll(insertOrder3);

    Iterator<File> iter=insertOrder1.iterator();
    while(iter.hasNext()){
        File fileInOrder=iter.next();
        System.out.println("Files moving are--"+fileInOrder.getName());
        File destLocation=new File(destDir+File.separator+fileInOrder.getName());
        FileUtils.moveFile(fileInOrder, destLocation);
    }
}

这段代码可以正常工作,但我的要求是优先级名称可以作为属性输入以逗号分隔的值形式给出。

像这样

String value="WTDocument,OEM-Document,WTPart,EPMDocument";
String[] choice=value.split(",");
for(int i=0;i<choice.length;i++){

}

现在我的条件是我需要根据choice[i]值验证条件并将其放入arraylist,然后将其移动。这里,我必须为多个选择值编写条件?然后我需要将它们按顺序排列,然后移动。

另外,该文件夹将具有不同名称的文件,这些文件未包含在选项中,我需要将它们添加到arraylist的末尾。

请有人建议我一个主意。

您可以为每个选择使用地图:

Map<String, ArrayList<File>> map = new HashMap...
for(String c : choice)
  map.put(c, new ArrayList<File>());

for(File fileToMove:initialLocation.listFiles()){
  String fileName=fileToMove.getName();
  if(fileToMove.getName().endsWith(".jar")) {
    String ch = findChice(fileName);
    if(ch != null) {
      map.get(ch).add(fileName);
    }     
...
}

String findChice(String s) {
  for(String c : choice)
    if(s.contains(c))return c;
  return null;
}
    String baseDir="D:\\vignesh\\MoveFolder";
    String destDir="D:\\vignesh\\MoveFolder\\testFolder";
    File initialLocation=new File(baseDir);
    String value="WTDocument,OEM-Document,WTPart,EPMDocument"; 
String[] choice=value.split(",");
for(int i=0;i<choice.length;i++){
    for(File fileToMove:initialLocation.listFiles()){
        String fileName=fileToMove.getName();

        if(fileName.contains(choice[i])){
            insertOrder.add(fileToMove);
        }
    }
}

现在,inner for循环迭代每个文件,并以第一选择的方式检查外部for循环的第一次迭代,并将其添加到列表中,下一个外部迭代具有第二优先级,并使用inner循环迭代文件,并仅将第二选择文件添加到列表中,依此类推

如果其他文件也意味着没有选择的文件键入名称? 如果是这种情况,则在内部循环内添加另一个条件,如下所示

为n个优先级文件创建一个arraylist insertOrderLeastPriority。

for(int i=0;i<choice.length;i++){
    for(File fileToMove:initialLocation.listFiles()){
        String fileName=fileToMove.getName();

        if(fileName.contains(choice[i])){
            insertOrder.add(fileToMove);
        }
else {
insertOrderLeastPriority.add(fileToMove);
}
insertOrder.addAll(insertOrderLeastPriority);
    }

现在应该可以了。

让我知道任何问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM