0

我刚开始开发一个简单的黑莓应用程序,它RichTextFieldMainScreen. 当我String直接在源代码中定义时,显示它没有问题。但是,如果我尝试从res文件夹中的 .txt 文件中读取它,那么我会得到一个.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 "";
    }
}

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

我什么时候需要缓冲区?

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

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

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

4

1 回答 1

0
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块包围它...

于 2013-06-21T08:54:49.110 回答