2017-05-18 4 views
-1

パターンで始まるファイルをJavaのフォルダからマージする方法。接頭辞で始まるファイルのファイルの内容をマージする

は、私は以下のようにファイルを持っている:

UW110_file_1.dat

ROW1 DATA1 SOMESTUFF1 
ROW2 DATA2 SOMESTUFF2 

UW110_file_2.dat

ROW3 DATA3 SOMESTUFF3 
ROW4 DATA4 SOMESTUFF4 

UW110_file_2.hdr

ROW3 DATA3 SOMESTUFF3 
ROW4 DATA4 SOMESTUFF4 

拡張子が.datのUW110で始まるすべてのファイルをチェックしてマージする必要があります。私は

以下のようにファイルを作成する必要があります。この場合

UW110_file

ROW1 DATA1 SOMESTUFF1 
ROW2 DATA2 SOMESTUFF2 
ROW3 DATA3 SOMESTUFF3 
ROW4 DATA4 SOMESTUFF4 
+0

をお楽しみいただけますが、ファイルからそれを解析する際に、データのユニークなストレージを確保するのに役立ちます。 ROW#を文字列キーとして使用し、データの残りの部分を値 –

答えて

0

はのはdatFolder

それを呼びましょう、ファイルが置かれている場所へのパスで Fileオブジェクトを作成します。
public String getMergedFiles(File datFolder) { 
    ArrayList<File> files = new ArrayList<>(); 
    files.addAll(Arrays.asList(datFolder.listFiles((f) -> f.getName().endsWith(".dat") && f.getName().startsWith("UW110")))); 

    StringBuilder sb = new StringBuilder(); 

    for (File datFile : files) { 
     InputStream is = new FileInputStream(datFile); 
     BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 

     String line = buf.readLine(); 
     while(line != null) { 
      sb.append(line).append("\n"); 
      line = buf.readLine(); 
     } 

     buf.close(); 
     is.close(); 
    } 

    return sb.toString(); 
} 

public void writeToFile(String input, File file) { 
    PrintWriter out = new PrintWriter(file); 
    try{ 
     out.println(input); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    out.close(); 
} 

// Somewhere in your code 
File folder = new File("myFolder"); 
writeToFile(getMergedFiles(folder), new File("outputFile.dat")); 

これはラムダを使っていますが、あなたがjaを使用していない場合にはどのように動作するかを調べますva 8は、それをループに変えるのは簡単なはずです。

このコードはテストしませんでしたが、うまくいくはずです。そうでない場合は、おそらく迅速な修正が必要です。

このメソッドが返す文字列をファイルに書き込むだけで、最終ファイルを作成することができます。

ハッシュテーブルを使用して:)

+0

として使用すると、ファイルをまとめて追加するだけで、出力を並べ替えることも、一意性を確保することもできません。 –

+0

著者が要求したものではありませんか?そして、私は彼がファイルに返された文字列を単に書くために "javaのファイルに書き込む方法"を調べるのに十分賢明だと確信しています – 086

+0

彼は上記の例を与えてマージする方法を尋ねています。これは質問 –