2016-04-10 8 views
-1

ich alle Dateien in den Pfaden lese diealle Dateien in einem Pfad lesen und auf sie zu überprüfen java

import java.io.BufferedReader; 
    import java.io.File; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 

    public class folderReader { 

     public static void main(String[] args) { 


      //Extension > .wav files 
      File folderWav = new File(
        "/home/bassem/Desktop/LatestData3/Nemlar_RMC/nemlar_RMC"); 
      File[] listOfWavs = folderWav.listFiles(); 


      //Extension > .insent 
      File folderInsent = new File(
        "/home/bassem/Desktop/LatestData3/outputInsent"); 
      File[] listOfInsents = folderInsent.listFiles(); 


      //Extension > .ctl 
      File folderCtl = new File("/home/bassem/Desktop/LatestData3/outputCtl"); 
      File[] listOfCtls = folderCtl.listFiles(); 



      for (File file : listOfWavs) { 
       for (File file2 : listOfInsents) { 
        for (File file3 : listOfCtls) { 
         if (file.isFile() && file2.isFile() && file3.isFile()) { 

          if ((file.getName().substring(0, 
            file.getName().length() - 4).equals(file3 
            .getName().substring(0, 
              file3.getName().length() - 4)))) { 
           if ((file2.getName().substring(0, 
             file2.getName().length() - 7).equals(file3 
             .getName().substring(0, 
               file3.getName().length() - 4)))) { 
            System.out.println(file3.getAbsolutePath()); 
           } 

          } 
         } 

        } 
       } 
      } 

     } 
    } 

im Code erwähnt alle Dateien After Reading ich mit der Verwendung von Teilzeichen auf ihren Namen bin Überprüfung zu entfernen (.ctl - .entgegen - .wav) und wenn sie gleich sind, sollte ich einige Sachen tun, die ich hier versuche, Pfad zu drucken, um zu überprüfen, ob der Code funktioniert und es nichts druckt

Ich versuchte, dieses zu benutzen und es funktionierte Nun, es hat sie alle gedruckt.

for (File file : listOfWavs) { 
    for (File file2 : listOfInsents) { 
     if (file.isFile() && file2.isFile()) { 
      if ((file.getName().substring(0, 
        file.getName().length() - 4).equals(file2.getName() 
        .substring(0, file2.getName().length() - 7)))) { 

       System.out.println(file2.getAbsolutePath()); 
      } 
     } 
    } 
} 

das Problem tritt nur auf, wenn ich auf den 3 Ordnern zusammen bin Überprüfung, wenn ich den Code es tut nichts nur eine leere Konsole laufen!

+0

Oh Gott. Bitte verwenden Sie die NIO.2-API: https://docs.oracle.com/javase/tutorial/essential/io/fileio.html. Dies wird sicherlich jedes Problem lösen, das Sie haben. Das ist Java 7. – Tunaki

+0

@Tunaki Ich kann .length() nicht anwenden, um einige Zeichen aus dem Namen jeder Datei zu entfernen. Ich denke, es gibt nichts Entsprechendes in Pfadklasse – LSDrako

+0

Es gibt ['Files.size'] (https : //docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#size-java.nio.file.Path-) ... Wirklich, nutze die neueste API, das waren sie speziell geschrieben, um diese Last zu erleichtern. – Tunaki

Antwort

0
String folder = "/home/bassem/Desktop/LatestData3/"; 

List<String> insents = readFolderBasenames(folder + "outputInsent", "insent"); 
List<String> wavs = readFolderBasenames(folder + "Nemlar_RMC/nemlar_RMC", "wav"); 
List<String> ctls = readFolderBasenames(folder + "outputCtl", "ctl"); 

insents.retainAll(wavs); 
insents.retainAll(ctls); 

for(String file : insents) { 
    System.out.println(folder + file + ".insent"); 
} 


private List<String> readFolderBasenames(String path, String extension) { 
    File[] arr = new File(path).listFiles()); 
    for(int i=0; i<arr.length; i++) { 
     arr[i] = arr[i].getName().substring(0, arr[i].getName().length() - extension.length() - 1); 
    } 
    return Arrays.asList(arr); 
} 
+0

Bitte erklären Sie auch, wie und warum das helfen könnte –

+0

Viel klarer, was es tut (keine 3 verschachtelte for-Schleifen + 3 verschachtelte if-Anweisungen). Auch viel schneller: O (n) anstelle von O (n^3) –

+0

@XsafasfaYadasd diese Zeile 'arr [i] = arr [i] .getName(). Substring (0, arr [i] .getName(). Länge() - extension.length() - 1); verursacht einen Fehler >> ** Typ stimmt nicht überein: kann nicht von String in Datei konvertieren ** – LSDrako