2013-10-31 70 views
-5

我想从两个文件夹打印文件的名称,该代码编译,但运行它没有给予任何。Java文件名称打印

这里的主要目的是找到两个文件夹通用名称的文件,我已保存的文件名中的两个数组,然后我会运用排序,并找到共同文件。

package javaapplication13; 

    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());//wow 
        System.out.println(listOfFiles1[i].getName()); 
       } 

      } 

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

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

     } 
    } 
+2

我会用'HashSet'这一点,而不是一个数组。 – Cruncher

+2

那么从前一天我帮助过的代码中,你从来没有写过任何其他的东西......? –

+1

你有没有调试过它,看看你是否像预期的那样进入你的循环,等等? – Andrew

回答

0

循环通过ArrayLists你有。每个ArrayList都包含文件名称。你需要一个嵌套循环(循环内的一个循环)。在嵌套循环的核心,你想要做的每一个ArrayList之间的比较,当前位置。您可以使用.equals()方法。伪代码是一样的东西:

//create a new ArrayList called "commonNameList" 
// loop through fileNames1 with position variable "i" 
    //loop through fileNames2 with position variable "j" 
     //tempFileName1 = fileNames1.get(i) 
     //tempFileName2 = fileNames2.get(j) 
     //if tempFileName1 equals tempFileName2 
      //commonNameList.add(tempFileName1) 

检查这些了:

http://mathbits.com/MathBits/Java/Looping/NestedFor.htm

Simple nested for loop example

How do I compare strings in Java?

+0

Bhaijaan,非常感谢... 请赐教... 我最近8个月没有编码... 我已经几乎忘记了一切.... 从哪里开始... – Shubham

+0

蒂克公顷亚尔帮助我。仅仅是乌尔都语/印地语都harab。 Mujah maaf karo。 | = ^] –

0

这里的主要目的是找到两个文件夹通用名称的文件,我已保存的文件名中的两个数组,然后我会运用排序,并找到共同文件。

我不喜欢这两个阵列的事情。此外,重复文件应该可能具有相同的长度以及相同的名称。如果你真的只是名字,你可以删除f.length() == temp.length()部分条件。

private static void findDups(String dirName1, String dirName2){ 
    File dir1 = new File(dirName1); 
    File dir2 = new File(dirName2); 
    Map<String,File> fileMap = new HashMap<String,File>(); 
    File[] files = dir1.listFiles(); 
    for(File f : files){ 
     fileMap.put(f.getName(),f); 
    } 

    files = dir2.listFiles(); 
    StringBuilder sb = new StringBuilder(100); 

    for(File f : files){ 
     File temp = fileMap.get(f.getName()); 
     if(temp != null && f.length() == temp.length()){ 
      sb.append("Found duplicate files: ") 
       .append(temp.getAbsolutePath()) 
       .append(" and ") 
       .append(f.getAbsolutePath()); 
      System.out.println(sb); 
      sb.delete(0,sb.length()); 
     } 
    } 
} 
+0

这是很好的代码,但他似乎是Java的新手,所以对他来说这样学习并不是最好的。 –

+0

@MadConan:很多东西都在我的脑海里...仍然感谢 – Shubham