2011-12-20 12 views
1

私はメソッドに渡すStringキーワードの配列を持っています。そのメソッドでは、配列をループして分析を行った後、テキストをファイルに出力します。私は、ファイルの名前は、キーワードの名前を一致させたいが、私はちょうど私が、このようなように、配列内の次の要素に移動新しいBufferedWriterのたびに作成した場合:JavaでBufferedWriterの配列を作成することはできますか?

for(int i = 0; i < array.length; i++) { 
    BufferedWriter writer = new BufferedWriter(new PrintWriter(array[i] + ".txt")); 
    ... 
} 

を、私は」することができます既存のファイルに新しいライターを作成すると、既存のコンテンツが消去されるため、前回の繰り返しで書いたこと(これはやりたいことです)を維持しています。

どのようにしても、私はBufferedWriterオブジェクトの配列を作成して、インデックス付けによってString配列の各要素に使用するライターに一致させることができますか?

+0

'PrintWriter'を使用しないでください。あなたはそう思わないでしょう。代わりに 'FileOutputStream'をラップして正しいエンコーディングで指定された' OutputStreamWriter'を使用してください。 –

+1

'BufferedWriter [] writers = new BufferedWriter [num];'配列に 'BufferedWriter'インスタンスを設定します。 –

+0

@trinithisは完璧に動作しました - ありがとう! – Reece

答えて

1

BufferedWriter複数の参照のリストを管理する必要はありません。必要なときに

だけ作成し、近い1:あなたはBufferedWriter参照のリストを維持したい

for(int i = 0; i < array.length; i++) { 
    if(/*condition if need to create file and write */) { 
     BufferedWriter writer = new BufferedWriter(new PrintWriter(array[i] + ".txt")); 
     // do the writings here 
     // and at last close it 
    } 
} 

場合は、その後、私はそれが良いMapHashMap<String, BufferedWriter>)を使用するようになり、map.put(keyword, writer)を行うgues。

Map<String, BufferedWriter> writers = new HashMap<String, BufferedWriter>(); 
//then store the writers there 

//in the second loop 
//and you simply look it up using the keyword 
//if the writer exists for current keyword use it 
//otherwise create a new one 
//I guess it would also be good to go through the map closing all the writers once done 
+0

私はこれを試しましたが、forループの外側にループがあるため、forループを2回実行すると、既存のテキストファイルに新しいライターが作成され、以前に保存したものが消去されます。私は非常に非効率的だったかもしれませんが(私はかなりJavaに慣れています)、上記のようにWriterの配列を作成していました。ありがとう。 – Reece

3

[[これはOPが望んでいるものを同じように、答えにコメントから移動します。]]

BufferedWriter[] writers = new BufferedWriter[num];

が続いBufferedWriterインスタンスを持つ配列を移入します。

1

私が正しく理解している場合は、HashMapまたはHashSetを使用して、作者をキーワードにマッピングできます。

String [] myStringArray = .... 
HashMap<String, BufferedWriter> writerMap = new HashMap<String, BufferedWriter>(); 

for(int i = 0; i < myStringArray.length; i++) { 
    String keyword = myStringArray[i]; 
    BufferedWriter writer = writerMap.get(keyword); 
    if(writer == null) { 
    writer = new BufferedWriter(new FileWriter(keyword + ".txt"); 
    writerMap.put(keyword, writer); 
    } 
    writer.write(...); 
} 

また、すべてのWriterを通過して終了するクリーンアップメソッドを追加することを忘れないでください。

public void cleanUp() { 
    Set<String> keySet = writerMap.keySet(); 
    for(String key : keySet) { 
    BufferedWriter writer = writerMap.get(key); 
    if(writer != null) { 
     try { 
     writer.close(); 
     } 
     catch(Throwable t) { 
     t.printStackTrace(); 
     } 
     writer = null; 
    } 
    } 
} 
関連する問題