Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Чтение и запись файла JSR-75


Автор: javastic 25.12.2006, 12:51

Я немного попробую на пальцах так сказать объяснить общие принципы smile (полностью обработку исключений могу где-то пропускать, так что строго не судите smile, я тут только принципы попытаюсь объяснить)

Ты получил доступ к файлу file:///root1/src_file.txt (для тех кто не знает, это делается классами из пакета JSR-75, но для того чтобы можно было писать что-то в файл используя JSR-75, необходимо чтобы мидлет был подписан)
Код

private static FileConnection fc = null;
private fileInputStream fis = null; // Данный поток используем для чтения информации из файла
private fileOutputStream fos = null; //Данный поток используем для записи информации в файл
.....
void openFile() {
    try {
        fc = (FileConnection) Connector.open("file:///" +"root1/" + "scr_file.txt", Connector.READ_WRITE);
        if(!fc.exist()) {
            fc.create();
            fc.close();
            fc = (FileConnection) Connector.open("file:///" +"root1/" + "scr_file.txt", Connector.READ_WRITE);
        }
            } catch(Exception e) {
        System.out.println("!!!! ERROR: "+e.toString());
    }
}

далее, мы собираемся что-то записать в данный файл. Если нам всё равно что писать в него и мы не хотим сохранять в этом файле информацию, ту, что была ранее в файле (то есть делаем операцию REWRITE)
Код

void reWriteFile() {
    writeFile(0);
}
void writeFile(int offset)
    if (fc ==null) return;
    if (offset<0) return;
//fc.fileSize() - этот метод позволяет получить длину файла, то есть, если смещение
//будет указано больше чем размер файла, то мы будем писать в конец нашего файла.

    int tmpOffset = fc.fileSize();
    if(offset<tmpOffset) tmpOffset=offset;
    try {
//fc.openOutputStream(long offset) - данный метод позволяет нам открыть поток,
//который мы будем исползьовать для записи информации в  файл, 
//Файл мы используем через FileConnector fc (но не следует забывать, что данный коннектор 
//у нас должен быть объявлен как использующий доступ READ_WRITE, а то будет ошибка при 
//попытке записи в файл)
//параметр offset - это смещение в файле, то есть положение, с которого у нас начнётся в него запись
//проще говоря позиция, с которой начнётся запись в файл.
        fos = fc.openOutputStream(tmpOffset);
        if(fos == null) return;
// используя OutputStream мы можем писть методом wtite 
// лишь массив байт или цело число, поэтому и необходимо создать объект класса String, 
//а потом привести его к массиву байт

        fos.write((new String("Hello, WORLD!")).getBytes()); 
        fos.close();
        fos=null;
        System.gc();
   } catch(Exception e) {
        System.out.println("!!! ERROR during REWRITE file: "+e.toString());
   }
}

Ну, вот вроде бы и всё, ничего сложного. smile
Тут конечно можно ещё много чего изменить, более правильно расставить обработку исключений, сделать методы не void а хотябы boolean чтобы возварщались значения, того как прошла операция записи. можно много чего ещё навернуть и сделать код более пригодным для коменрческой эксплуатации, и т.д., но для обучения и понятия основ - думая этого вполне достаточно.

Dancer.......
Всех с подкравшимся Новым Годом, и наступающим Рохдеством!!!!


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