2017-10-14 15 views
0

クライアントがPOSTメソッドを呼び出してPOSTメソッド内で文字列を渡すプログラムを作成していますが、このメソッドはEC2にあるファイルに文字列を書き込みます。しかし、私はEC2上にファイルを作成し、それにコンテンツを書き留めています。これまでのところ、私はこのようなPOSTメソッドを持っています:EC2にあるファイルに書き込む

@POST 
@Path("/post") 
@Consumes(MediaType.APPLICATION_XML) 
@Produces(MediaType.APPLICATION_XML) 
public Response postEntry(MyEntry myEntry) throws URISyntaxException { 
    try { 
     FileWriter fw = new FileWriter("\\\\my-instance-public-ip-address\\Desktop\\data.txt", true); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(myEntry.toString()); 
     bw.close(); 
     fw.close(); 

    } catch (Exception e) { 
     System.err.println("Failed to insert : " + e.getCause()); 
     e.printStackTrace(); 
    } 
    String result = "Entry written: " + myEntry.toString(); 
    return Response.status(201).entity(result).build(); 
} 

このように間違っていますか?ファイルの場所が間違っていますか? (プログラムはエラーなく実行されますが、ファイルは表示されません)。どんな助けでも大歓迎です。

+0

オペレーティングシステムを使用して質問をEC2インスタンスにタグ付けしなかったのはなぜですか? –

答えて

0

これは私がそのコードを書く方法は以下のようになります検討する

@POST 
@Path("/post") 
@Consumes(MediaType.APPLICATION_XML) 
@Produces(MediaType.APPLICATION_XML) 
public Response postEntry(MyEntry myEntry) throws URISyntaxException { 

    String filename = "/my-instance-public-ip-address/Desktop/data.txt"; 

    // use try-with-resources (java 7+) 
    // if the writters are not closed the file may not be written 
    try (FileWriter fw = new FileWriter(filename, true); 
      BufferedWriter bw = new BufferedWriter(fw)){ 

     bw.write(myEntry.toString()); 

    } catch (Exception e) { 

     String error = "Failed to insert : " + e.getCause(); 

     // Use a logger 
     // log.error("Failed to insert entry", e); 

     // don't print to the console 
     System.err.println(error); 
     // never use printStackTrace 
     e.printStackTrace(); 

     // If there is an error send the right status code and message 
     return Response.status(500).entity(error).build(); 
    } 

    String result = "Entry written: " + myEntry.toString(); 
    return Response.status(201).entity(result).build(); 
} 

もの:

  • /my-instance-public-ip-address/Desktop/が絶対パスで、フォルダが存在しなければならないと、Javaアプリケーションは、それ以上の権限を持っている必要があります(たとえば、tomcatを使用している場合は、tomcatユーザーに権限があることを確認してください)。このパスはlinuxで動くようにフォーマットされています。
  • ファイルシステムのルートにパブリックIPアドレスを持つフォルダがある理由、またはその内部にDesktopというフォルダがある理由がわかりません。
  • EC2では、ubuntuマシンのデスクトップフォルダは通常/home/ubuntu/Desktopです。
  • コードは、リモートではなくEC2インスタンスで実行する必要があります。
+0

ありがとうございます。ええ。それも試しました。 – potbelly

+0

ディスクラベル 'D:\\ my-instance-ip-address \\ Desktop \\ data.txt'を追加しようとしましたか(ウィンドウは右ですか?) –

+0

ウィンドウはありません。これはAWS – potbelly

関連する問題