Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > TreeMap, метод put().


Автор: Likurg 12.5.2006, 19:23
Здраствуйте.
Пишу программу...и в одной части кода что-то не работает..Смысл таков: читаю из файла и записываю в TreeMap(т.к он сортирует ключи), потом я просто переписываю содержимое TreeMap в файл(соответственно уже в нужном мне порядке). Только вот проблема: исходный файл 60 мегов, а получившийся - всего 50-100 кбайт.
Код
File filesForSort[] = new File(textField.getText()).listFiles(new MyFileFilter("txt", false)); // получаю файлы 
// для обработки.
BufferedReader readerForSort;
TreeMap hm;
String nameWriter;
FileWriter fw;

for(File file : filesForSort) {
  readerForSort = new BufferedReader(new FileReader(file.toString()));
  hm = new TreeMap();
  while((str = readerForSort.readLine()) != null) {
    st = new StringTokenizer(str, ",");
    hm.put(Integer.parseInt(st.nextToken()), str);  //Идеа обводит hm.put в темно-желтый цвет.
    //а также пишет: unchecked call to 'put(K, V)' as a member of raw type 'java.util.TreeMap'
  }


  readerForSort.close();
  nameWriter = file.getName();
  file.delete();


  fw = new FileWriter(textField.getText() + "\\\\" + nameWriter);
  Set set = hm.entrySet();
  Iterator i = set.iterator();
  while(i.hasNext()) {
    Map.Entry me = (Map.Entry)i.next();
    fw.write((String)me.getValue());
  }
  fw.close();
}

Думаю, что-то не так с методом put() - и идеа выделяет тоже. Надеюсь на вашу помощь.   

Автор: LSD 12.5.2006, 19:41
Проблема не в put() (идея тебя просто предупреждает, что ты не используешь генерики).
Судя по всему проблема в самих данных, вероятно те значения что ты используешь в качестве ключа просто совпадают. Что за данные лежат в файле? 

Автор: w1nd 12.5.2006, 22:01
TreeMap не только сортирует ключи, но и не допускает возникновения повторяющихся ключей. Улавливаете? 

Автор: Likurg 13.5.2006, 14:53
Ага. нашел я, где ошибка....Дело в том, что в файлах нету повторяющихся ключей..но после обработки, их становится очень много..итог - ну вы видите smile Спасибо за помощь.

Еще один вопросик, кот. не связан с этим: 
как делать так, чтобы можно было читать файл много раз??при этом не создавая новых потоков?
устанавливать mark() на большее, чем размер файла? 

Автор: LSD 14.5.2006, 00:42
Цитата(Likurg @  13.5.2006,  15:53 Найти цитируемый пост)
как делать так, чтобы можно было читать файл много раз??при этом не создавая новых потоков?
устанавливать mark() на большее, чем размер файла? 

Использовать RandomAccessFile или MappedByteBuffer.

И на будущее: одна тема - один вопрос. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)