我刚刚开始开发一个简单的Blackberry应用程序,它在RichTextField
MainScreen
上显示文本序列。当我直接在源代码中定义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文件中的文本返回一个String-Object。
当然这种方法应该节省资源......
答案 0 :(得分: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
块来包围它......