Codename One中的文本屏幕,如何读取文本文件?

3
我希望为我的Codename One应用程序添加一个帮助屏幕。由于文本比其他字符串更长,我想将其放在单独的文件中并将其添加到应用程序包中。
我该怎么做?我应该把文本文件放在哪里,如何轻松地一次性将其读入一个字符串中?
(我已经知道如何将字符串放入表单内的文本区域中)
3个回答

5
在Codename One Designer中,进入数据部分并添加一个文件。
您可以在那里添加文本,并使用myResFile.getData("name");获取它。
您也可以将文件存储在src目录中,并使用Display.getInstance().getResourceAsStream("/filename.txt");获取它。

+1 我可以问一下myResFile最初是如何被调用的吗?抱歉,我对Codename One还不熟悉 :) - Roy Lee
1
如果您正在使用GUIBuilder应用程序,则可以使用fetchResourceFile()方法;如果您正在使用手动应用程序,则可以查看init方法以查看res文件的加载。您可以选择缓存或每次加载。 - Shai Almog
如果资源文件位于'src/main/resources'中的依赖项中,该怎么办? - EliuX
你不能将资源放在根src目录之外,它们必须在那里。iOS本身不支持层次结构的本地资源加载,因此我们需要一个扁平的结构。对于除HTML之外的任何内容,请参考:http://www.codenameone.com/blog/html-hierarchy-release-plan-teavm.html - Shai Almog

1

我更喜欢将文本文件存储在文件系统中,而不是资源编辑器中,因为我可以使用IDE轻松地编辑文本。方法getResourceAsStream是解决方案的第一部分。第二部分是一次性加载文本。在J2ME中没有支持此功能,您需要自己读取、处理缓冲区等。幸运的是,在codename one中有一个实用程序方法。因此,我的工作方法现在看起来像这样:

    final String HelpTextFile = "/helptext.txt";
    ...
    InputStream in = Display.getInstance().getResourceAsStream(
            Form.class, HelpTextFile);
    if (in != null){
        try {
            text = com.codename1.io.Util.readToString(in);
            in.close();
        } catch (IOException ex) {
            System.out.println(ex);
            text = "Read Error";
        }
    }

0

以下代码对我有效。

//Gets a file system storage instance
FileSystemStorage inst = FileSystemStorage.getInstance();
//Gets CN1 home`
final String homePath = inst.getAppHomePath();
final char sep = inst.getFileSystemSeparator();
// Getting input stream of the file
InputStream is = inst.openInputStream(homePath + sep + "MyText.txt");
// CN1 Util class, readInputStream() returns byte array
byte[] b = Util.readInputStream(is);
String myString = new String(b);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接