【问题标题】:Read a String-object out of a .txt file from the res folder of a Blackberry app从 Blackberry 应用程序的 res 文件夹中的 .txt 文件中读取字符串对象
【发布时间】:2013-06-17 14:50:33
【问题描述】:

我刚开始开发一个简单的黑莓应用程序,它在RichTextFieldMainScreen 上显示一个文本序列。当我直接在源代码中定义String时,显示它就没有问题了。但是,如果我尝试从位于 res 文件夹中的 .txt 文件中读取它,那么我会得到一个 NullPointerException

下面的代码是我到目前为止所做的。

package mypackage;

import java.io.IOException;
import java.io.InputStream;
import net.rim.device.api.io.IOUtilities;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;

public final class MyScreen extends MainScreen{
    String str = readFile("Testfile.txt");

    public MyScreen(){
        setTitle("Read Files");
        add(new RichTextField(str));
    }

    public String readFile(String filename){
        InputStream is = this.getClass().getResourceAsStream("/"+filename);
        try {
            byte[] filebytes = IOUtilities.streamToBytes(is);
            is.close();
            return new String(filebytes);
        }
        catch (IOException e){
            System.out.println(e.getMessage());
        }
        return "";
    }
}

我在这个论坛中找到了这段代码的一部分,但我的问题是我不明白何时必须打开连接以及何时关闭它。

我什么时候需要缓冲区?

为什么我必须将InputStream 转换为byte[],然后将byte[] 转换为String

我只需要一种方法,我可以在其中输入文件名并返回一个字符串对象,其中包含我的 .txt 文件中的文本。

当然,该方法应该节省资源......

【问题讨论】:

  • 文件Testfile.txt 是否放置在您的项目中,直接res 文件夹中?它是这样拼写的吗?您在使用 BlackBerry Eclipse 插件吗?
  • 是的,文件在 res 文件夹中,它的拼写完全像这样。是的,我正在使用 BlackBerry Eclipse 插件

标签: string file text blackberry


【解决方案1】:
package mypackage;

import java.io.IOException;
import java.io.InputStream;

import net.rim.device.api.io.IOUtilities;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;

public final class MyScreen extends MainScreen {

public MyScreen() throws IOException {
    setTitle("Read Files");
    add(new RichTextField(readFileToString("Testfile.txt")));
}

public String readFileToString(String path) throws IOException {
    InputStream is = getClass().getResourceAsStream("/"+path);
    byte[] content = IOUtilities.streamToBytes(is);
    is.close();
    return new String(content);
}
}

是的!!!我找到了解决我的问题的方法。 我不知道为什么我以前的代码不起作用,但这个起作用... 我唯一改变的是我添加了throws IOException,而不是用try - catch 块包围它......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    相关资源
    最近更新 更多