2013-11-04 13 views
-1

我想在兩個文件夾中找到相同的名稱文件。 我在兩個數組列表中使用了File和列出的文件名。 然後我將兩個文件夾中的常用名稱文件添加到新的數組列表中,並將差異應用於查找這些文件是否不同。是否有可能存儲文件夾中的文件在動態數組中的Java

由於我只存儲了數組列表中的文件名,因此我無法直接在這些文件上應用操作。

有人告訴我,通過使用動態數組的一個可以將文件保存在Java中...

我的代碼到現在有一​​些偉大的朋友的幫助:

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

public class ListFiles1 
{ 

    public static void main(String[] args) 
    { 

     String path1 = "C:\\Users\\hi\\Downloads\\IIT Typing\\IIT Typing"; 

     String path2 = "C:\\Users\\hi\\Downloads\\IIT Typing\\IIT Typing"; 

     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.get(i); 
      tempfilename2 = fileNames2.get(j); 
      if(tempfilename1.equals(tempfilename2)) 
       { 
       commonfiles.add(tempfilename1); 
       System.out.println(commonfiles); 
       } 
      } 
    }    

    } 
} 
+0

你有直接的方法來獲取文件名列表:fileObject.list(),返回一個字符串[] –

+0

你是我見過的最懶的人。你沒有自己編寫任何代碼;你不停地質問複製粘貼人們答案的問題,然後期待更多的幫助把它們放在一起。 – Boann

+0

@Boann:請仔細閱讀我的問題,我指定我是用我的粉絲幫助完成的...... 不錯,不要尋找邪惡......終極之旅結束於自己看到自己的時候 – Shubham

回答

3

而是然後有一個ArrayList文件名稱的字符串,只是有文件的ArrayList

List<File> filesList1 = Arrays.asList(folder1.listFiles()); 
List<File> filesList2 = Arrays.asList(folder2.listFiles()); 

然後進行比較時,如果它們具有相同的名稱,然後做的,如果它是一個文件,你的支票,並有同名,那麼你有對File對象的引用,而不僅僅是名稱,所以你可以讀取這些文件並查看它們是否相同。

for (File f1 : filesList1) 
{ 
    if(f1.isFile()) 
    { 
     for (File f2 : filesList2) 
     { 
      if(f2.isFile() && f1.getName().equals(f2.getName)) 
      { 
       commonfiles.add(f1.getName()); 
       System.out.println(f1.getName()); 
      } 
     } 
    } 
}  

這可能是方式更有效地做套雖然

+0

我原本以爲加載收藏這個方式,但它不會工作 - 你需要加載文件名(也許File.list()將爲此工作 - 但我不知道如果它返回完整的路徑,或只是文件名) –

+0

唯一的錯誤我製作了正在編輯的列表。 –

+0

啊 - 我明白了你的意圖 - 是的,使用套件效率會更高;-) –

2

我不知道你的問題實際上是在這裏,但我建議你使用:

Set<String> dir1Files = new HashSet<String>(); 
Set<String> dir2Files = new HashSet<String>(); 

// load the sets with the filenames by iterating the File.listFiles() value, and using File.isFile() and File.getName() - just like your existing code 

dir1Files.retainAll(dir2Files); 

// now dir1Files contains the filenames that are the same in both directories 

如果你需要使用文件本身,只需重新創建File對象:

File dir1File = new File(folder1, filename); 
1
import java.io.File; 
public class FileNameMatcher 
{ 
    public static void main(String[] args) 
    { 
     File folder1 = new File("C:/Users/pappu/Downloads"); 
     File folder2 = new File("C:/Users/pappu"); 
     for(String fileFromFolderOne:folder1.list()) 
     { 
      for(String fileFromFolderTwo:folder2.list()) 
      { 
       if(fileFromFolderOne.equals(fileFromFolderTwo)) 
       { 
        System.out.println("match found"); 
        System.out.println("file name is ===>>>"+fileFromFolderOne); 
       } 
      } 
     } 
    } 
} 
相關問題