Как читать из TXT-файла в Blackberry Eclipse? - PullRequest
1 голос
/ 27 декабря 2011

Я занимаюсь разработкой простого приложения для Blackberry в BlackBerry - Java Plug-in для Eclipse.В этом я хочу прочитать данные из внешнего текстового файла.Я искал это и попробовал несколько советов, как .Но в конце концов не удалось.Я опишу мое приложение ...

мой основной файл ...

package com.nuc;

import net.rim.device.api.ui.UiApplication;
public class Launcher extends UiApplication
{
    public static void main(String[] args)
    {
        Launcher theApp = new Launcher();       
        theApp.enterEventDispatcher();
    }

    public Launcher()
    {        
        pushScreen(new MyScreen());
    }    
}

И тогда мой класс приложения будет похож на ....

package com.nuc;

import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.GridFieldManager;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;

public final class MyScreen extends MainScreen implements FieldChangeListener
{
// declared variables...
    public MyScreen()
    {     
      //rest codes...

IЯ хочу показать некоторые детали из текстового файла перед запуском моего приложения, например, Лицензионное соглашение с конечным пользователем ... то есть что-то, что появляется в первой строкетекстовый файл ... я получил много указаний от net, но ничего не помогло затмению ... Во-вторых, как мне прочитать файл и поместить его содержимое в диалог?добиться этого .. пример кода будет заметно, потому что я новичок в этой среде ...

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Чтобы добавить файл в ваш Eclipe проект

  • щелкните правой кнопкой мыши папку res в структуре вашего проекта, нажмите New, нажмите Untitled Text File, введите текст и сохраните файл.

Для чтения из файла и отображения в диалоговом окне попробуйте что-то вроде следующего фрагмента кода:

try {
    InputStream is = (InputStream) getClass().getResourceAsStream("/Text");
    String str = "";            
    int ch;
    while ((ch = is.read()) != -1) {
        str += (char)ch;
    }
    synchronized (UiApplication.getEventLock()) {
        Dialog.alert(str == null ? "Failed to read." : str);    
    }
} catch (Exception e) {
    synchronized (UiApplication.getEventLock()) {
        Dialog.alert(e.getMessage() + " + " + e.toString());
    }
}

в приведенном выше коде "/Text" - имя файла. И если вы получили NullPointerException, проверьте имя файла и путь.

1 голос
/ 05 июня 2012

Ответ Рупака в основном правильный, но есть несколько проблем с ним. Вы определенно не хотите добавлять неизменяемые строки в такой ситуации. Когда вы добавляете две строки вместе (myString + = "Another String"), Java в основном создает новый объект String со значениями двух других строк, потому что он не может изменять содержимое других строк. Обычно это хорошо, если вам просто нужно добавить две строки вместе, но в этом случае, если у вас большой файл, вы создаете новый объект String для КАЖДОГО символа в файле (каждый объект больше, чем предыдущий). Существует много накладных расходов, связанных с созданием этого объекта, и сборщик мусора (очень медленный) должен будет вмешиваться чаще из-за всех этих объектов, которые необходимо уничтожить.

StringBuffer на помощь! Использование StringBuffer вместо конкатенации строк потребует создания только 1 объекта и будет намного быстрее.

try {
    InputStream is = (InputStream) getClass().getResourceAsStream("/Text");
    StringBuffer str = new StringBuffer();            
    int ch;
    while ((ch = is.read()) != -1) {
        str.append((char)ch);
    }
    UiApplication.getUiApplication().invokeLater(new Runnable(){
        public void run(){
            Dialog.alert(str.toString() == null ? "Failed to read." : str.toString());
        }
    }
} catch (Exception e) {
    UiApplication.getUiApplication().invokeLater(new Runnable(){
        public void run(){
            Dialog.alert(e.getMessage() + " + " + e.toString());
        }
    }
}

Также несколько разработчиков на форумах поддержки Blackberry рекомендуют не использовать UiApplication.getEventLock(), потому что это может быть "опасно". Они рекомендуют использовать invokeLater() вместо этого. См. Форумы поддержки Blackberry

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