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

时间:2014-04-22 06:42:19

标签: java

我尝试了一些代码,用于将文件从一个文件夹移动到另一个具有一定优先级的文件夹(意味着具有某个名称的文件应首先移动)。

    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末尾添加这些文件。

请有人建议我一个想法。

3 个答案:

答案 0 :(得分:0)

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

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;
}

答案 1 :(得分:0)

    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);
        }
    }
}

现在,for for循环遍历每个文件,并首先检查外部for循环的第一次迭代并将它们添加到列表中,下一次外部迭代采用第二优先级并使用内部循环迭代文件,并仅将第二个选择文件添加到列表中等等

答案 2 :(得分:0)

如果其他文件也意味着名称中没有选择类型的文件?如果是这种情况,那么在内部循环中添加一个else条件,如下所示

为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);
    }

现在它应该可以工作..

让我知道任何问题