Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание файла 
:(
    Опции темы
Samuil
Дата 22.12.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Привет программеры!!! По форуму искал но ответа на данный вопрос не нашел! Решаю одну проблемму: прога должна создавать фаил в телефоне и вносить в него данные. Получается только первое - создание, не знаю как сделать чтоб внести данные в фаил. Подскажите пожалуйста как можно решить данную прогу smile. Вот написанный мной код: 

Код

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.midlet.MIDlet;

public class FileBrowser extends MIDlet {


  public void startApp() {
    createFile();
  }

  public void pauseApp() {}

  public void destroyApp(boolean cond) {
    notifyDestroyed();
  }

  void createFile() {
    try {
      FileConnection fc = (FileConnection) Connector.open("file:///" +
          "root1/" + "scr_file.txt");

      fc.create();

    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
}

З.Ы. Хотябы чтобы работало на эмуле


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
Dancer
Дата 22.12.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



    public java.io.OutputStream openOutputStream(long byteOffset) throws java.io.IOException;

OutputStream os = fc.openOutputStream(0);


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Dancer
Дата 25.12.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



Самуил попросил объснить, что да как. Так как он не работал с классами типа OutputStream (ну, из письма я именно так понял, если что-то не так, то ты меня поправляй smile )
В принципе, в классе OutputStream нет ничего сложного, если ты работал (ну или хоть когда нибудь смотрел) c OutputStream из J2SE. Так же в J2ME то же есть свой класс java.io.OutputStream. Всю документацию, как с ним работать ты можешь найти в доках которые идут с WTK.

Я немного попробую на пальцах так сказать объяснить общие принципы 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.......
Всех с подкравшимся Новым Годом, и наступающим Рохдеством!!!!


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
javastic
Дата 25.12.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Добавлено в FAQ. Спасибо.  smile 


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Samuil
Дата 25.12.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Dancer, Спасибо! Лови плюсик smile 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.