谷歌应用引擎-在GWT项目中写入文本文件



在我的GWT项目(它是一个游戏)中,我想将玩它的用户的分数存储到位于服务器端的文件中。并使用String.

在输出中显示它们

我可以从文件中读取数据,但我不能写入文件,它总是说谷歌应用引擎不支持这个。我想知道为什么谷歌应用引擎不支持它?是否有任何方法可以将数据添加到服务器端的文件?请随时补充您的意见,我们将不胜感激。

你不能在App Engine上写入file,但是你有两个其他的选择。

首先,如果文本小于1MB,可以使用text实体将文本存储在Datastore中。

第二,可以将文本存储在Blobstore中。

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

使用像这样的技巧来规避这个问题。下载commons-codec-1.10并添加到构建路径中。添加以下代码片段,可以在线复制到CMDUtils.java中,并放入'shared'包中:
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项目编写文本文件。

相关内容

  • 没有找到相关文章

最新更新