Java 基于文件名在文件夹之间移动文件

Java 基于文件名在文件夹之间移动文件,java,Java,我尝试了一些代码,用于将文件从一个文件夹移动到另一个文件夹,并具有某种优先级(意味着具有某个名称的文件应首先移动) String choice1=“WTDocument”; String choice2=“OEM文档”; ArrayList insertOrder1=新的ArrayList(); ArrayList insertOrder2=新的ArrayList(); ArrayList insertOrder3=新的ArrayList(); String baseDir=“D:\\vigne

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

String choice1=“WTDocument”;
String choice2=“OEM文档”;
ArrayList insertOrder1=新的ArrayList();
ArrayList insertOrder2=新的ArrayList();
ArrayList insertOrder3=新的ArrayList();
String baseDir=“D:\\vignesh\\MoveFolder”;
String destDir=“D:\\vignesh\\MoveFolder\\testFolder”;
文件初始位置=新文件(baseDir);
对于(文件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);
}
否则{
insertOrder3.add(fileToMove);
}
}
}
insertOrder1.addAll(insertOrder2);
insertOrder1.addAll(insertOrder3);
迭代器iter=insertOrder1.Iterator();
while(iter.hasNext()){
File fileinoorder=iter.next();
System.out.println(“正在移动的文件是--”+fileInOrder.getName());
File destLocation=新文件(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++){

}
String value=“WTDocument、OEM文档、WTPart、EPMDocument”;
String[]choice=value.split(“,”);

对于(int i=0;i您可以为每个选项使用一个映射:

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;
}
Map Map=newhashmap。。。
for(字符串c:选项)
put(c,newarraylist());
对于(文件fileToMove:initialLocation.listFiles()){
String fileName=fileToMove.getName();
if(fileToMove.getName().endsWith(“.jar”)){
字符串ch=findChice(文件名);
如果(ch!=null){
map.get(ch.add)(文件名);
}     
...
}
字符串查找芯片(字符串s){
for(字符串c:选项)
如果(s.包含(c))返回c;
返回null;
}
String baseDir=“D:\\vignesh\\MoveFolder”;
String destDir=“D:\\vignesh\\MoveFolder\\testFolder”;
文件初始位置=新文件(baseDir);
字符串值=“WTDocument、OEM文档、WTPart、EPMDocument”;
String[]choice=value.split(“,”);

对于(int i=0;i如果其他文件也表示名称中没有选择类型的文件?如果是这种情况,则在内部循环中添加一个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);
    }

for(int i=0;i文件夹可能包含这些文件名以外的文件。您的循环未处理这些文件。抱歉,请在外部循环insertOrder.addAll(insertOrderLeastPriority)之后添加此行;这是将重复元素添加到arraylist中,当我删除这些重复对象时,顺序将发生更改..?请检查您是否保留了行insertOrder.addAll(insertOrderLeastPriority);外部for循环之外,因为如果我们将其保留在内部for循环中,它将与重复项一起添加..检查并让我知道
    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(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);
    }