读取 Google 云应用程序中的 wordnet 文件夹
Reading wordnet folder in Google Cloud Application
我在 GAE 中有一个 Scala Web 应用程序 运行。我需要使用 Java 库 -JWI- 这需要我将 Wordnet 的根文件夹传递到 edu.mit.jwi.Dictionary
的构造函数中。
我考虑过将所有 Wordnet 内容都放入 Google 云存储中,但它根本没有文件夹的概念。所以,我的问题是:有什么方法可以用 Google Cloud Storage 做我想做的事,还是我应该使用其他任何东西?
您可以使用 Google 云存储 (GCS),即使 gsutil 处理 different way 中的子目录也是如此,因为它的行为与普通文件夹相同并使用相同的表示法。
我不确定你的应用程序是如何工作的,但如果我猜对了:
- 将 JWI 库加载到您的云端 Shell。
- 在 App Engine 灵活的 Scala 应用程序中导入库。查找有关如何使用 Scala 调用 Java class 的示例 here。
- 部署应用程序。按照前面的步骤,部署的图像将包含您需要的 JWI 库。
- 将 Wordnet 语义词典加载到存储桶中并传递 Wordnet 的根文件夹,在本例中为 GCS 文件夹,使用 Google 云存储 API 的 Java client library。 “词典”必须在您使用时下载(使用获取函数)并存储在本地。
Find here the Java client library documentation 用于云存储。您可能需要比下面我为您编写的函数更多的函数来创建存储桶、上传文件和下载文件。
package com.example.storage;
// Imports the Google Cloud client library
import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
public class QuickstartSample {
public static void main(String... args) throws Exception {
// Instantiates a client
Storage storage = StorageOptions.getDefaultInstance().getService();
// The name for the new bucket
String bucketName = args[0]; // "my-new-bucket";
// Creates the new bucket
Bucket bucket = storage.create(BucketInfo.of(bucketName));
System.out.printf("Bucket %s created.%n", bucket.getName());
// [START uploadFile]
// Object name
String fileName="filename.ext";
// Create file inside the bucket
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, fileName)
// Modify access list to allow all users with link to read file
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build()
// other options required
);
// return the public download link
blobInfo.getMediaLink();
// [END uploadFile]
// Copy file from a bucket
String blobName = "filename.ext";
BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.get(blobId);
}
最后,找到here如何编译代码和运行它:
mvn clean package -DskipTests
mvn exec:java -Dexec.mainClass=com.example.storage.QuickstartSample -Dexec.args="bucketName"
当您说“Google 云 Java 库中没有 API 用于文件夹操作时,您是对的”。截至今天,java 客户端库没有文件夹操作。你可以查一下图书馆here
我在 GAE 中有一个 Scala Web 应用程序 运行。我需要使用 Java 库 -JWI- 这需要我将 Wordnet 的根文件夹传递到 edu.mit.jwi.Dictionary
的构造函数中。
我考虑过将所有 Wordnet 内容都放入 Google 云存储中,但它根本没有文件夹的概念。所以,我的问题是:有什么方法可以用 Google Cloud Storage 做我想做的事,还是我应该使用其他任何东西?
您可以使用 Google 云存储 (GCS),即使 gsutil 处理 different way 中的子目录也是如此,因为它的行为与普通文件夹相同并使用相同的表示法。
我不确定你的应用程序是如何工作的,但如果我猜对了:
- 将 JWI 库加载到您的云端 Shell。
- 在 App Engine 灵活的 Scala 应用程序中导入库。查找有关如何使用 Scala 调用 Java class 的示例 here。
- 部署应用程序。按照前面的步骤,部署的图像将包含您需要的 JWI 库。
- 将 Wordnet 语义词典加载到存储桶中并传递 Wordnet 的根文件夹,在本例中为 GCS 文件夹,使用 Google 云存储 API 的 Java client library。 “词典”必须在您使用时下载(使用获取函数)并存储在本地。
Find here the Java client library documentation 用于云存储。您可能需要比下面我为您编写的函数更多的函数来创建存储桶、上传文件和下载文件。
package com.example.storage;
// Imports the Google Cloud client library
import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
public class QuickstartSample {
public static void main(String... args) throws Exception {
// Instantiates a client
Storage storage = StorageOptions.getDefaultInstance().getService();
// The name for the new bucket
String bucketName = args[0]; // "my-new-bucket";
// Creates the new bucket
Bucket bucket = storage.create(BucketInfo.of(bucketName));
System.out.printf("Bucket %s created.%n", bucket.getName());
// [START uploadFile]
// Object name
String fileName="filename.ext";
// Create file inside the bucket
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, fileName)
// Modify access list to allow all users with link to read file
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build()
// other options required
);
// return the public download link
blobInfo.getMediaLink();
// [END uploadFile]
// Copy file from a bucket
String blobName = "filename.ext";
BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.get(blobId);
}
最后,找到here如何编译代码和运行它:
mvn clean package -DskipTests
mvn exec:java -Dexec.mainClass=com.example.storage.QuickstartSample -Dexec.args="bucketName"
当您说“Google 云 Java 库中没有 API 用于文件夹操作时,您是对的”。截至今天,java 客户端库没有文件夹操作。你可以查一下图书馆here