Я не могу понять, как читать данные после того, как я их сохранил - PullRequest
0 голосов
/ 07 мая 2011

Проблема в том, что я использую метод write класса FileOutputStream. Документы, которые я прочитал, сказали, что это выводит байт в файл. Я не могу найти метрики чтения в классе FileOutputStream. Но есть метод чтения ikn InputStreamReader. Проблема в том, что в прочитанной мной документации сказано, что эта функция чтения класса возвращает символ, преобразовывая байты в символ. Будет ли это изменить данные. Как я должен прочитать данные обратно в.

код, который сохраняет файл и, кажется, работает

boolean Save()
{
      String FILENAME = "hello_file";
      String string = "hello world!";
      cDate mAppoitments[];   


      try {
      FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE );

      int i;
      mAppoitments=cDates.GetUpperDates();
      for(i=0;i<cDates.getMaxAmount();i++)
      {
          i=mAppoitments[i].getMonth();
          fos.write( i  );
          i=mAppoitments[i].getDay();
          fos.write( i  );
          i=mAppoitments[i].getYear()-1900;
          fos.write( i  );            
      }

      mAppoitments=cDates.GetLowerDates();
      for(i=0;i<cDates.getMaxAmount();i++)
      {
          i=mAppoitments[i].getMonth();
          fos.write( i  );
          i=mAppoitments[i].getDay();
          fos.write( i  );
          i=mAppoitments[i].getYear()-1900;
          fos.write( i  );            
      }       
      fos.close();
      }
      // just catch all exceptions and return false
        catch (Throwable t) {
            return false;
        }

 return true;
  }

Ответы [ 4 ]

1 голос
/ 07 мая 2011

Правило, которое у меня есть, - использовать один и тот же тип потока для чтения и записи. Поэтому, если вы открыли файл для записи, используя openFileOutput, используйте openFileInput, чтобы открыть поток ввода для чтения. поскольку метод write(int) записывает один байт в файл, вы можете безопасно использовать метод read() для чтения каждого байта и присвоения его переменной.

НО , в ваших циклах есть большая проблема - вы изменяете i внутри цикла, не связанные с индексированием:

      i=mAppoitments[i].getMonth(); // now i might be assigned with 12
      fos.write( i  ); // you write 12
      i=mAppoitments[i].getDay(); // now you look for mAppoitments[12].getDay()
      ....

Используйте другую переменную, чтобы записать это значение в файл, не изменяйте i внутри цикла. Например:

for(i=0;i<cDates.getMaxAmount();i++)
  {
      int j;
      j=mAppoitments[i].getMonth();
      fos.write( j  );
      j=mAppoitments[i].getDay();
      fos.write( j  );
      j=mAppoitments[i].getYear()-1900;
      fos.write( j  );            
  }
1 голос
/ 07 мая 2011

Просто откройте файл в виде потока:

// open the file for reading
InputStream instream = openFileInput(FILENAME);
// prepare the file for reading
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);

Чем вы можете прочитать это построчно

0 голосов
/ 07 мая 2011

Думаю, у вас возникнут некоторые проблемы с использованием i для итератора и в качестве переменной для хранения того, что вы пишете.

0 голосов
/ 07 мая 2011

Если вам удобнее, вы можете обернуть поток вывода в PrinterWriter, а вы можете обернуть входное устройство чтения пара в BufferedReader.Затем вы можете писать и читать строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...