2013-03-14 4 views
4

У меня есть hashMap Integer, String (K, V) и хочу писать только строковые значения в файл (а не ключ Integer), и я хочу написать только некоторые 1-го n записей (без определенного порядка) в файл, а не всю карту. Я пробовал много оглядеться, но не смог найти способ записи 1-го n записей в файл. (Есть примеры, где я могу преобразовать значение в массив строк, а затем сделать это], но тогда он не обеспечивает правильный формат в котором я хочу, чтобы записать файл)Запись из hashmap в txt-файл

+1

'тогда он не дает правильный формат, в котором я хочу написать файл', о чем вы говорите? – nattyddubbs

+0

Я хочу, чтобы строки были напечатаны так, как они ... 1 на каждой строке ... а не в виде списка [] i.e разделены запятой – mag443

ответ

0

Просто поток ...

Получить итератор для значений. Итерации через них, увеличивающие счетчик. Выйдите, когда счетчик достигнет n записей.

Другой подход заключается в использовании

for(int i=0, max=hashmap.size(); i<max, i<n; i++) { ... } 
+0

Можете ли вы предоставить код для итератора с помощью счетчика? Я думаю, что это то, что мне нужно. – mag443

+0

Чувак, ты беспокоился о RTFM? Черт ... – User

8

Это звучит как домашнее задание.

public static void main(String[] args) throws IOException { 
    // first, let's build your hashmap and populate it 
    HashMap<Integer, String> map = new HashMap<Integer, String>(); 
    map.put(1, "Value1"); 
    map.put(2, "Value2"); 
    map.put(3, "Value3"); 
    map.put(4, "Value4"); 
    map.put(5, "Value5"); 

    // then, define how many records we want to print to the file 
    int recordsToPrint = 3; 

    FileWriter fstream; 
    BufferedWriter out; 

    // create your filewriter and bufferedreader 
    fstream = new FileWriter("values.txt"); 
    out = new BufferedWriter(fstream); 

    // initialize the record count 
    int count = 0; 

    // create your iterator for your map 
    Iterator<Entry<Integer, String>> it = map.entrySet().iterator(); 

    // then use the iterator to loop through the map, stopping when we reach the 
    // last record in the map or when we have printed enough records 
    while (it.hasNext() && count < recordsToPrint) { 

     // the key/value pair is stored here in pairs 
     Map.Entry<Integer, String> pairs = it.next(); 
     System.out.println("Value is " + pairs.getValue()); 

     // since you only want the value, we only care about pairs.getValue(), which is written to out 
     out.write(pairs.getValue() + "\n"); 

     // increment the record count once we have printed to the file 
     count++; 
    } 
    // lastly, close the file and end 
    out.close(); 
} 
+4

Да, возможно, кто-то еще найдет это полезным при исследовании реальной проблемы. Легче было написать код, чем это было, чтобы подшучивать взад и вперед с аськой, пытаясь определить * почему * код нужен. Приношу свои извинения за пуристов. :) – AWT

+0

вам лучше объяснить свой код, без объяснения этого кода ничего не стоит. как вы сказали, это будет полезно для других, если они поймут. без объяснения, которые они могли бы просто скопировать/вставить. :) – PermGenError

+1

Спасибо, чувак ... это не вопрос HW .... Я новичок в java и немного запутался с итераторами и счетчиками ... выше объясняет, что мне нужно – mag443

0

Ссылка: Java API

Попробуйте

  1. Получить коллекцию значений с карты. Прочтите ссылку на объект Map и найдите метод с именем values. Используйте этот метод
  2. Итерируйте по набору значений, которые вы получили на шаге 1. Впишите некоторые (по вашему выбору) в файл. Форматируйте по мере необходимости во время записи.