2

在我的 GWT 项目(它是一个游戏)中,我想将玩它的用户的分数存储到位于服务器端的文件中。并使用字符串在输出中显示它们。

我可以从文件中读取数据,但我不能写入文件,它总是说 Google App Engine 不支持这个。我想知道为什么 Google App Engine 不支持它?有什么办法可以将数据添加到服务器端的文件中?请随意添加您的所有意见,每件事将不胜感激。

4

2 回答 2

3

file您无法在 App Engine 上写入 a ,但您有两个其他选项。

首先,如果您的文本小于 1MB,您可以使用Text entity将文本存储在 Datastore 中。

其次,您可以将文本存储在Blobstore中。

于 2013-01-21T04:36:31.917 回答
0

在 GWT 项目中不能使用任何代码或依赖 jar 文件来编写文本文件,但可以使用执行 cmd 命令的代码。

使用这样的技巧来规避问题。下载commons-codec-1.10并添加到构建路径。将以下可在线复制的代码段添加到 CMDUtils.java 并放入“共享”包中:

public static StringBuilder execute(String... commands) {
    StringBuilder result = new StringBuilder();

    try {
        Runtime runtime = Runtime.getRuntime();
        Process proc = runtime.exec(new String[] { "cmd" });

        // put a BufferedReader
        InputStream inputstream = proc.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputstream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        PrintWriter stdin = new PrintWriter(proc.getOutputStream());

        for (String command : commands) {
            stdin.println(command);
        }
        stdin.close();

        // MUST read the output even though we don't want to print it,
        // else waitFor() may fail.
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            result.append(line);
            result.append('\n');
        }
    } catch (IOException e) {
        System.err.println(e);
    }
    return result;
}

添加对应的 ABCService.java 和 ABCServiceAsync.java 然后添加:

public class ABCServiceImpl extends RemoteServiceServlet implements ABCService {


public String sendText(String text) throws IllegalArgumentException {

    text= Base64.encodeBase64String(text.getBytes());

    final String command = "java -Dfile.encoding=UTF8 -jar \"D:\\abc.jar\" " + text;
    CMDUtils.execute(command);
    return "";      
}

abc.jar 被创建为一个可执行的 jar,其中入口点包含一个 main 方法,如下所示:

public static final String TEXT_PATH = "D:\\texts-from-user.txt";

public static void main(String[] args) throws IOException {
    String text = args[0];

    OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(TEXT_PATH, true));
    text = new String(Base64.decodeBase64(text));
    writer.write("\n" + text);
    writer.close();
}

我已经尝试过了,它成功地适用于 GWT 项目的文本文件写入。

于 2016-06-08T01:57:44.570 回答