VFSLib Google Drive Example
Please read the following steps to use the VFSLib Java library. This example demonstrates the usage of the Google Drive © provider included in the VFSLib artifacts.
The Java example code is based on the original Apache Commons VFS 2.0 classes like DefaultFileSystemManager and thus should integrate seamlessly into existing implementations.
- Step 1: Download VFSLib
- Step 2: Running The Google Drive Example
- Step 3: The Google Drive Example Step By Step
Step 1: Download VFSLib
First of all please download the current VFSLib source archive on your computer and extract.
In the vfslib-src-2.8.2\src\test\java\com\lf\vfslib\test\gdrive folder you can find the Google Drive example code to be executed directly in your favorite IDE like IntelliJ IDEA.
Please take a look at the README.md to get the Maven project up and running from pom.xml.
Step 2: Running The Drive Example
Start the example main class(es) via your IDE:
- DriveQuickstart.java 3rd party community example
- ExampleGoogleDrive.java Based on VFS 2.0 standards only (recommended)
You will need to run the example in a graphical environment since the classes display dialogs to prompt the user for the parameters necessary for Google Drive. |
As the figures show you are asked to specify ID and secret for your application. Please go create a Google Drive account on the Google website and create a project and application using the Cloud Console. Don't forget to
have the Drive API enabled for your project registered from within the Cloud Console. The ID and secret generated by Google can be used to fill in the dialog input fields (see figures 1 and 2).
Figure 1: Google Drive example client ID dialog
Figure 2: Google Drive example client secret dialog
Figure 3: Google Drive example access token/code
The next dialog is displayed (see figure 3) where you can enter the code (access token) from Google. Simultaneously the example opens your favorite Internet browser showing the Google Drive website to get this code. Remember that it may be necessary to log in to Google Drive first. The access token is necessary to allow your application to access your Google Drive account.
If all input has been done the example will continue in the background by performing some simple file operations using the specified Google Drive account. Please check out the output of the example script.
If you already have client ID and secret as well as a working access token/code from Google feel free to specify as main class params. The input dialogs will not be displayed any longer. |
Step 3: The Drive Example Step By Step
Let's take a closer look at the Google Drive example implementation. The first thing to do is to configure the VFSLib class which is the central class of the VFSLib library:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Setup the main VFSLib instance VFSLib vfslib = new VFSLib(); // We use the default file system manager here DefaultFileSystemManager fsmanager = (DefaultFileSystemManager) VFS.getManager(); // Add Google Drive provider to VFS GDriveFileProvider provider = vfslib.addProviderGoogleDrive(fsmanager, clientid, clientsecret, appname, redirecturi); String scheme = vfslib.getSchemeGoogleDrive(); // Pass access token over to VFSLib to access the Google Drive account FileSystemOptions options = new FileSystemOptions(); GDriveFileSystemConfigBuilder builder = new GDriveFileSystemConfigBuilder(); builder.setAccessToken(options, token); builder.setUseTrash(options, true); // Allow deleted entries be restored // Setup proper account name, used as user name for Google Drive URLs (failsafe is "anonymous"): // gdrive://[name]:[token]@drive.google.com String username = "johndoe"; builder.setAccountDisplayName(options, username); |
Configuration of the VFSLib (see ExampleGoogleDrive.java)
List a Drive Folder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
String uri = scheme + "://" + username + "@drive.google.com"; try { FileObject fileobj = fsmanager.resolveFile(uri, options); if (fileobj.getType().equals(FileType.FOLDER)) { FileObject[] childs = fileobj.getChildren(); for (FileObject next : childs) { if (next.getType().equals(FileType.FOLDER)) { System.out.println(" DIR: " + String.valueOf(next)); } else System.out.println(" FILE: " + String.valueOf(next)); } } else System.out.println(" Entry " + uri + " is not a folder"); } catch (Exception e) { e.printStackTrace(); } |
List a Drive folder (see ExampleGoogleDrive.java)
Create a Drive Folder
1 2 3 4 5 6 7 8 9 10 11 |
String tempfolder = scheme + "://" + username + "@drive.google.com/0123456789abcdefghijklmnopqrstuvwxyz"; boolean success = false; try { FileObject fileobj = fsmanager.resolveFile(tempfolder, options); if (!fileobj.exists()) { fileobj.createFolder(); success = fileobj.exists(); } } catch (Exception e) { e.printStackTrace(); } |
Create a Drive folder (see ExampleGoogleDrive.java)
Upload a File To Drive, Get File Type, Last Modified, And Size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
String content = "Hello world!"; String encoding = "ISO-8859-1"; // Upload a file to Google Drive. Get file type, last modified, and size. String tempfile = tempfolder + "/readme.txt"; try { FileObject fileobj = fsmanager.resolveFile(tempfile, options); fileobj.getContent().setAttribute(VFSLibConstants.ATTR_CONTENT_LENGTH, content.getBytes(encoding).length); OutputStream ostream = fileobj.getContent().getOutputStream(); ostream.write(content.getBytes(encoding)); ostream.flush(); ostream.close(); success = fileobj.exists(); System.out.println(" TYPE: " + fileobj.getType().getName()); System.out.println(" MOD: " + new Date(fileobj.getContent().getLastModifiedTime())); System.out.println(" SIZE: " + fileobj.getContent().getSize()); } catch (Exception e) { e.printStackTrace(); } |
Upload a file to Drive, get file type, last modified, and size (see ExampleGoogleDrive.java)
Rename a Drive File
1 2 3 4 5 6 7 8 9 |
String tempfilerenamed = tempfolder + "/README"; try { FileObject fileobj = fsmanager.resolveFile(tempfile, options); FileObject fileobjrenamed = fsmanager.resolveFile(tempfilerenamed, options); fileobj.moveTo(fileobjrenamed); success = fileobjrenamed.exists(); if (success) tempfile = tempfilerenamed; } catch (Exception e) { e.printStackTrace(); } |
Rename a Drive file (see ExampleGoogleDrive.java)
Download a File From Drive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
try { FileObject fileobj = fsmanager.resolveFile(tempfile, options); ByteArrayOutputStream bostream = new ByteArrayOutputStream(); InputStream istream = fileobj.getContent().getInputStream(); int len; byte[] buffer = new byte[1024]; while ((len = istream.read(buffer)) != -1) { bostream.write(buffer, 0, len); } istream.close(); bostream.flush(); bostream.close(); String loaded = new String(bostream.toByteArray(), encoding); success = loaded.equals(content); } catch (Exception e) { e.printStackTrace(); } |
Download a file from Drive (see ExampleGoogleDrive.java)
Remove a Drive File And Folder
1 2 3 4 5 6 7 8 9 10 |
try { // Remove file FileObject fileobj = fsmanager.resolveFile(tempfile, options); success = fileobj.delete(); // Remove folder fileobj = fsmanager.resolveFile(tempfolder, options); success = fileobj.delete(); } catch (Exception e) { e.printStackTrace(); } |
Remove a Drive file and folder (see ExampleGoogleDrive.java)
How to continue
- View the Howto: VFSLib - Apache Commons VFS Reloaded
- View the API documentation (Javadoc)
- Download the current VFSLib archives
- Do you have any questions? Please send us a support request.