2017-07-05 15 views
0

以下のコードは動作し、ロジックは機能します。しかし、私はfileNames1fileNames2の配列に保持されている両方のフォルダで同じではない実際のファイルの名前を出力したいと思います。私は解決策なしで答えを探していました。私はちょうどそれをしばらく離してからJavaでグルーヴに戻っています。どんな助けもありがとう。異なるファイル名を出力する

import java.io.File; 
import java.util.ArrayList; 

public class nameCompare { 

    public static void main(String[] args) { 

     String path1 = "C:/Users/hoflerj/Desktop/test"; 
     String path2 = "C:/Users/hoflerj/Desktop/test2"; 

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

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

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

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

      if (listOfFiles1[i].isFile()) 
      { 
       fileNames1.add(listOfFiles1[i].getName());//wow 
      } 
     } 

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

      if (listOfFiles2[i].isFile()) 
      { 
       fileNames2.add(listOfFiles2[i].getName());//seriously wow 
      } 
     } 


     for (int i = 0; i < 1; i++) 
     { 
      if (fileNames1.equals(fileNames2)) 
      { 
       System.out.println("Files names are the same"); 
      } 

      else if (fileNames1 != fileNames2) 
      { 
       System.out.println("Files names are not equal"); 
      } 
     } 

    } 

} 
+0

あなたは正確に出力には何を探していますか? – ZeldaZach

+0

'fileNames1!= fileNames2'は文字列を比較する方法ではありません。あなたが作った最初のテストの前に '!'を入れてください。 '!fileNames1.equals(fileNames2)'を実行して、そのテストと反対のテストを行います。 –

答えて

0

あなたは両方のリストを作成し、人口した後、次のコードを使用します - これは何のコードがないことであれば二ArrayList最初ArrayListの各fileNameのためにそれがチェックするということです

for(String fileName : fileNames1) 
{ 
if(!fileNames2.contains(fileName)) 
    { 
    System.out.println(fileName + " is not in both"); 
    } 
else 
    { 
    System.out.println(fileName + " is in both the lists"); 
    } 
} 

を同じファイル名を含んでいるかどうかを調べ、それに応じて出力を出力します。

+0

eclipseは(String fileName:fileNames1)に対してこれを提案します。あれは正しいですか? – Jonathan

+0

これは、リスト1にない項目2が欠落します。したがって、fileNames2にすべてのfileNames1といくつかの項目が含まれている場合は、「両方のリストにファイル」以外は何も表示されません – Tezra

+0

eclipseでこのエラーをどのように回避できますか?ファイル名の下に赤い線があります.Names1 – Jonathan

0

両方の配列のすべての要素を比較するだけです。

for(int i = 0; i <= listOfFiles1.length - 1; i++) 
{ 
    for(int j = 0; i <= listOfFiles2.length - 1; i++) 
{ 
    if (listOfFiles1[i].equals(listOfFiles2[j])) 
     { 
      System.out.println("Files names are the same"); 
     } 

     else if (listOfFiles1[i]!= listOfFiles2[j]) 
     { 
      System.out.println("Files names are not equal"); 
     } 

} 

} 
1

これを行うための最も簡単かつエレガントな方法は次のとおりです。

List<String> commonFiles= new ArrayList<String>(fileNames1); 
    commonFiles.retainAll(fileNames2);  

    Set<String> uniqueFiles = new HashSet<String>(fileNames1); 
    uniqueFiles.addAll(fileNames2); 
    uniqueFiles.removeAll(commonFiles); 
関連する問題