写入位于EC2上的文件

时间:2017-10-14 23:25:36

标签: java file http amazon-ec2 operating-system

我正在编写一个程序,客户端将调用POST方法传递字符串,在POST方法中,它会将字符串写入位于EC2上的文件。但我很难在EC2上创建一个文件并将内容写入其中。到目前为止,我有一个像这样的POST方法:

@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();
}

我这样做错了吗?文件位置错了吗? (程序运行没有错误,但没有文件显示)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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实例中执行,而不是远程执行。