2016-04-10 8 views
-1

私は削除する部分文字列を使用して、私は自分の名前にチェックしていたすべてのファイルを読んだ後、コード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()); 
           } 

          } 
         } 

        } 
       } 
      } 

     } 
    } 

で言及したパス内のすべてのファイルを読んでいますパス内のすべてのファイルを読み込み、そこにチェック(.ctl - .insent - .wav)もしそれらが等しければ、私はコードが動作していて何も印刷していないかどうかを確認するためにここに印刷経路を試みています。

私はこれを試してみました。それはすべてそれらを印刷しました。

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()); 
      } 
     } 
    } 
} 

問題が発生するのは、私が3つのフォルダを一緒にチェックしているときに、コードを実行すると何もしないだけの空のコンソールです。

+0

Oh god。 NIO.2 API(https://docs.oracle.com/javase/tutorial/essential/io/fileio.html)を使用してください。これはあなたが持っているあらゆる問題を解決するものです。これはJava 7です。 – Tunaki

+0

@ Tunaki各ファイルの名前からいくつかの文字を削除するために.length()を適用することはできません。これと同等のものはPathクラスにないと思います。 – LSDrako

+0

['Files.size'](https ://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#size-java.nio.file.Path-)...実際、最新のAPIを使用していましたその負担を軽減するために書かれています。 – Tunaki

答えて

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

また、これがどのように役立つのかを説明してください。 –

+0

これは何をしているのでしょうか(3つのネストされたforループと3つのネストされたif文はありません)。また、はるかに高速:O(n^3)の代わりにO(n) –

+0

@XsafasfaYadasdこの行は{arr [i] = arr [i] .getName()、substring(0、arr [i] .getName () - extension.length() - 1); 'エラーが発生する>> **型の不一致:文字列からファイルに変換できない** – LSDrako