com.google.cloud.examples.nio
com.google.cloud.nio.retrofit
com.google.cloud.storage.contrib.nio
Java 7 nio FileSystem client library for Google Cloud Storage.
This client library allows you to easily interact with Google Cloud Storage, using Java's standard file system API, introduced in Java 7.
How It Works
The simplest way to get started is with Paths
and Files
:
Path path = Paths.get(URI.create("gs://bucket/lolcat.csv"));
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
For the complete source code see ReadAllLines.java.
If you want to configure the bucket per-environment, it might make more sense to use the
FileSystem
API:
FileSystem fs = FileSystems.getFileSystem(URI.create("gs://bucket"));
byte[] data = "hello world".getBytes(StandardCharsets.UTF_8);
Path path = fs.getPath("/object");
Files.write(path, data);
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
For the complete source code see GetFileSystem.java.
You can also use InputStream
and OutputStream
for streaming:
Path path = Paths.get(URI.create("gs://bucket/lolcat.csv")); try (InputStream input = Files.newInputStream(path)) { // use input stream }
For the complete source code see CreateInputStream.java.
You can set various attributes using CloudStorageOptions static helpers:
Path path = Paths.get(URI.create("gs://bucket/lolcat.csv")); Files.write(path, csvLines, StandardCharsets.UTF_8, withMimeType("text/csv; charset=UTF-8"), withoutCaching());
For the complete source code see WriteFileWithAttributes.java.
NOTE: Cloud Storage uses a flat namespace and therefore doesn't support real directories. So this library supports what's known as "pseudo-directories". Any path that includes a trailing slash, will be considered a directory. It will always be assumed to exist, without performing any I/O. This allows you to do path manipulation in the same manner as you would with the normal UNIX file system implementation. You can disable this feature with com.google.cloud.storage.contrib.nio.CloudStorageConfiguration#usePseudoDirectories().
Non-SPI Interface
If you don't want to rely on Java SPI, which requires a META-INF file in your jar generated by Google Auto, you can instantiate this file system directly as follows:
CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("bucket"); byte[] data = "hello world".getBytes(StandardCharsets.UTF_8); Path path = fs.getPath("/object"); Files.write(path, data); data = Files.readAllBytes(path);
For the complete source code see CreateCloudStorageFileSystem.java.