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


Автор: Adept 16.8.2005, 10:11
Левая программа считывает с файла qqq.sla, каждые несколько секунд значение, а моя утилита каждые 10 сек формирует етот файл с новым значением.
Если чтение и запись совпадут во времени, то получается я несмогу произвести запись.
Я делаю так
Код

public void  buttonGo_actionPerformed(ActionEvent e){
        buttonGo.setEnabled(false);
        final Vector vArray = new Vector();
        javax.swing.Timer timer = new javax.swing.Timer((Integer.parseInt(valueClock.getText())*1000), new ActionListener(){
            public void actionPerformed(ActionEvent e){
               try {
                 vArray.removeAllElements();
                 BufferedReader in = new BufferedReader(new FileReader(fromFilePath.getText()));
                 BufferedWriter out = new BufferedWriter(new FileWriter(toFilePath.getText()+"\\"+sFileName));
                 String stroka = "";
                 while ((stroka = in.readLine())!=null) {
                     vArray.addElement(stroka);
                 }
                 out.write(vArray.elementAt(vArray.size()-1).toString());
                 in.close();
                 out.flush();
                 out.close();

              } catch (IOException ioe){}
            }
        } );
        timer.start();
    }

Если ставить таймер 1 минуту, то нормально работает весь день. Если поставить секунд 10, то гдето через минут 10 начинается сбой утилиты. В чем может быть трабла?

Автор: Adept 16.8.2005, 12:20
Хотя нет, чтение и запись несовпадали.
Почемуто через некоторое время файл qqq.sla становится пустым и при попытке его открыть вручную говорит невозможно открыть файл.

Автор: igon 29.8.2005, 23:27
Возможно, возникает исключение, которое ты просто игнорируешь. При этом потоки in или out могут остаться незакрытыми, а файл - "занятым".
Попробуй так
Код

...
               try {
                 vArray.removeAllElements();
                 BufferedReader in = new BufferedReader(new FileReader(fromFilePath.getText()));
                 String stroka = "";
                 while ((stroka = in.readLine())!=null) {
                     vArray.addElement(stroka);
                 }
                 in.close();
                 BufferedWriter out = new BufferedWriter(new FileWriter(toFilePath.getText()+"\\"+sFileName));
                 out.write(vArray.elementAt(vArray.size()-1).toString());
                 out.flush();
                 out.close();

              } catch (IOException ioe){
                   ioe.printStackTrace(); 
                }
          finally
            {
              if (out != null) 
                { 
                  try {
                        out.close();
                      }  
                      catch (IOException e)
                        {
                          e.printStackTrace(); 
                        }
                }
              if (in != null) 
                {
                  try {
                        in.close();
                      }  
                      catch (IOException e)
                        {
                          e.printStackTrace();
                        }
                }


Автор: Adept 30.8.2005, 13:09
Ага. Я уже понял. smile
Иногда этот файл обнуляется.

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