2013-11-01 7 views
-1

Я пытаюсь найти общие файлы имен из двух массивов. Я сохранил имена файлов двух разных папок в двух разных массивах.Поиск общих файлов из двух массивов

Теперь я создаю общий массив файлов, который будет иметь файлы с общим именем.

имена файлы 1: Array флуд имен файлов в папке 1.

файл 2: Array флуд имен файлов в папке 2.

import java.io.File; 
import java.util.*; 

public class ListFiles1 
{ 

    public static void main(String[] args) 
    { 

     String path1 = "C:\\"; 

     String path2 = "D:\\"; 

     File folder1 = new File(path1); 
     File folder2 = new File(path2); 

     String[] f1=folder1.list(); 

     File[] listOfFiles1 = folder1.listFiles(); 
     File[] listOfFiles2 = folder2.listFiles(); 

     ArrayList<String> fileNames1 = new ArrayList<>(); 
     ArrayList<String> fileNames2 = new ArrayList<>(); 

     for (int i = 0; i < listOfFiles1.length; i++) 
     { 

      if (listOfFiles1[i].isFile()) 
      { 
       fileNames1.add(listOfFiles1[i].getName()); 
       System.out.println(f1[i] + " is a file"); 
      } 

     } 

     for (int j = 0; j < listOfFiles2.length; j++) 
     { 

      if (listOfFiles2[j].isFile()) 
      { 
       fileNames2.add(listOfFiles2[j].getName()); 
      } 
     } 

     ArrayList<String> commonfiles = new ArrayList<>(); 
     for (int i = 0; i < listOfFiles1.length; i++) 
     { 
     for (int j = 0; i < listOfFiles2.length; j++) 
      { 
      String tempfilename1; 
      String tempfilename2; 
      tempfilename1=fileNames1[i]; 
      tempfilename2 = fileNames2[j]; 
      if(tempfilename1.equals(tempfilename2)) 
       { 
       commonfiles.add(tempfilename1); 
       } 
      } 
     }     
    } 
} 

Я написал этот код, но компилятор дает эту ошибку:

Main.java:52: error: array required, but ArrayList<String> found 
      tempfilename1=fileNames1[i]; 
            ^
Main.java:53: error: array required, but ArrayList<String> found 
      tempfilename2 = fileNames2[j]; 
            ^

P.S : I am a Newbie...

+0

Что вы хотите сказать? – fxm

+0

@fxm: Отредактировано ... – Shubham

+0

Проверьте переменные. Я думаю, что вы внесли свой вклад в массивы строк и попытались использовать его как аррайалист. –

ответ

5

Если filenames1 является array вы можете не использовать ArrayList способ get(int i).

Вам необходимо получить доступ к элементам array, используя arrayName[elementIndex].

В вашем случае:

tempfilename1=filenames1[i]; 
tempfilename2=fileNames2[j]; 
0

Вы можете сделать следующее, чтобы получить общий набор строк между двумя массивами:

String[] listOfFiles1 = {"file1", "file2", "file3"}; 
    String[] listOfFiles2 = {"file2", "file3", "file5"}; 

    HashSet<String> common = new HashSet<String>(Arrays.asList(listOfFiles1)); 
    common.retainAll(new HashSet<String>(Arrays.asList(listOfFiles2))); 

    System.out.println(common); // -> output: file2, file3 

Вам не нужно преобразовать их в наборы, хотя, но это устранит риск дублирования ключей. Если вы хотите показать дубликаты, вы можете немного упростить его:

List<String> common = new ArrayList<String>(Arrays.asList(listOfFiles1)); 
    list1.retainAll(Arrays.asList(listOfFiles2)); 
Смежные вопросы