gpt4 book ai didi

google-cloud-storage - 带有 Java 的谷歌云存储 gsutil 工具

转载 作者:行者123 更新时间:2023-12-02 15:31:48 27 4
gpt4 key购买 nike

如果我们每天有大约 30G 文件(从 50MB 到 4GB 不等)需要上传到 Google Cloud Storage,根据 google docs,gsutil 可能是唯一合适的选择,不是吗?

我想通过 Java 调用 gsutil 命令,现在下面的代码可以工作了。但是如果我删除那个 while 循环,程序将在 runtime.exec(command) 之后立即停止,但是 python 进程已经启动但没有上传,它很快就会被杀死。我想知道为什么。

我之所以从 sterr stream 读取是受 Pipe gsutil output to file 的启发

我通过 read util 状态输出的最后一行来决定 gsutil 是否完成执行,但这是一种可靠的方式吗?在 Java 中有没有更好的方法来检测 gsutil 执行是否结束?

String command="python c:/gsutil/gsutil.py cp C:/SFC_Data/gps.txt"
+ " gs://getest/gps.txt";
try {
Process process = Runtime.getRuntime().exec(command);
System.out.println("the output stream is "+process.getErrorStream());
BufferedReader reader=new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while ((s = reader.readLine()) != null){
System.out.println("The inout stream is " + s);
}
} catch (IOException e) {
e.printStackTrace();
}

最佳答案

每天向 GCS 上传 30G 数据的方法肯定不止一种。由于您使用 Java,是否考虑过使用 Cloud Storage API Java 客户端库? https://developers.google.com/api-client-library/java/apis/storage/v1

关于Java中使用Runtime.exec()调用gsutil的具体问题,我怀疑在没有while循环的情况下,程序会在创建子进程后立即退出,导致“process”变量被GC 'ed,这可能会终止子进程。

我认为您应该等待子流程完成,这实际上就是 while 循环所做的事情。或者,如果您不关心输出,您可以只调用 waitFor() 并检查 existValue() : http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

关于google-cloud-storage - 带有 Java 的谷歌云存储 gsutil 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com