2013-01-21 2 views
2

내 GWT 프로젝트 (게임 임)에서 게임을하는 사용자의 점수를 서버 측에있는 파일에 저장하고 싶습니다. String을 사용하여 출력에 표시합니다.GWT 프로젝트의 텍스트 파일에 쓰기?

파일에서 데이터를 읽을 수는 있지만 파일에 쓸 수는 없으며 항상 Google App Engine이이를 지원하지 않는다고 말합니다. Google App Engine에서이 기능을 지원하지 않는 이유를 알고 싶습니다. 서버 측 파일에 데이터를 추가 할 수있는 방법이 있습니까? 모든 의견을 추가 하시려면 모든 것을 부탁드립니다.

답변

3

App Engine에서 file에 쓸 수는 없지만 다른 두 가지 옵션이 있습니다.

먼저 텍스트가 1MB 미만인 경우 Text entity을 사용하여 데이터 저장소에 텍스트를 저장할 수 있습니다.

두 번째로 Blobstore에 텍스트를 저장할 수 있습니다.

+0

나는 나의 파일이 1MB를 초과하지 않을 것이라고 확신한다. 그것은 10 쌍 (String name, int score)이다. 그래서 당신이 선호하는 것이 나를 위해 유용할까요? 그리고 이것에 대한 샘플을 제공해 주시겠습니까? – Dipak

+1

귀하의 필요에 따라 :이 옵션들 중 어느 것도 선택의 여지가 없습니다. 그것들을 10 개의 개별 엔티티 또는 String 속성을 가진 하나의 엔티티로 저장할 수 있습니다. App Engine에 데이터를 저장하는 방법에 대해 읽어야합니다. https://developers.google.com/appengine/docs/java/datastore/overview –

+0

배열 또는 목록 문자열이있는 하나의 엔티티를 선호합니다. – Dipak

0

텍스트 파일 작성을위한 코드 또는 종속 jar 파일은 GWT 프로젝트에서 사용할 수 없지만 cmd 명령을 실행하기위한 코드는 사용할 수 있습니다.

트릭을 사용하면 문제를 피할 수 있습니다. commons-codec-1.10을 제거하고 빌드 경로에 추가하십시오. CMDUtils.java 온라인 복사하고 '공유'패키지에 넣을 수있는 다음 코드를 추가 : 다음 ABCService.java 및 ABCServiceAsync.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; 
} 

추가 추가 :

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은 진입 점과 같은 주요 방법이 포함되어있는 실행 항아리로 만들어집니다 :이 시도

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 p를 위해 쓰는 텍스트 파일을 성공적으로 작동 방아쇠.