Java 快速入門導覽課程

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

快速入門導覽課程會說明如何設定並執行會呼叫 Google Workspace API 的應用程式。

Google Workspace 快速入門導覽課程會使用 API 用戶端程式庫處理驗證和授權流程的部分細節。建議您在自己的應用程式中使用用戶端程式庫。每個快速入門導覽課程都必須啟用驗證和授權,才能執行範例應用程式。如果您不熟悉 Google Workspace API 的驗證和授權,請參閱驗證和授權總覽

建立 Java 命令列應用程式,向 Google Drive API 發出要求。

目標

  • 設定環境。
  • 設定範例。
  • 執行範例。

必要條件

  • 已啟用 Google 雲端硬碟的 Google 帳戶。

設定環境

如要完成本快速入門導覽課程,請設定您的環境。

啟用 API

您必須先在 Google Cloud 專案中啟用 Google API,才能使用 Google API。您可以在單一 Google Cloud 專案中啟用一或多個 API。
  • 在 Google Cloud 控制台啟用 Google Drive API。

    啟用 API

為電腦版應用程式授權憑證

如要以使用者的身分進行驗證,並存取應用程式中的使用者資料,您必須建立一或多個 OAuth 2.0 用戶端 ID。用戶端 ID 可讓 Google 的 OAuth 伺服器識別單一應用程式。如果您的應用程式是在多個平台中運作,您必須為每個平台分別建立用戶端 ID。
  1. 在 Google Cloud 控制台中,依序點選「選單」圖示 > [API 和服務] > [憑證]

    前往「憑證」

  2. 依序按一下 [建立憑證] > [OAuth 用戶端 ID]
  3. 依序按一下 [應用程式類型] > [電腦版應用程式]
  4. 在 [名稱] 欄位中輸入憑證的名稱。這個名稱只會出現在 Google Cloud 控制台中。
  5. 按一下「建立」,畫面上會顯示 OAuth 用戶端建立的畫面,其中顯示新的用戶端 ID 和用戶端密鑰。
  6. 按一下「OK」。新建立的憑證會顯示在「OAuth 2.0 用戶端 ID」之下。
  7. 將下載的 JSON 檔案儲存為 credentials.json,然後將檔案移至工作目錄。

準備工作區

  1. 在工作目錄中建立新的專案結構:

    gradle init --type basic
    mkdir -p src/main/java src/main/resources 
    
  2. src/main/resources/ 目錄中,複製您先前下載的 credentials.json 檔案。

  3. 開啟預設的 build.gradle 檔案,並將程式碼替換為以下程式碼:

    drive/quickstart/build.gradle
    apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'DriveQuickstart'
    sourceCompatibility = 11
    targetCompatibility = 11
    version = '1.0'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'com.google.api-client:google-api-client:2.0.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1'
        implementation 'com.google.apis:google-api-services-drive:v3-rev20220815-2.0.0'
    }
    

設定範例

  1. src/main/java/ 目錄中,建立新的 Java 檔案,其名稱與 build.gradle 檔案中的 mainClassName 值相符。

  2. 在新 Java 檔案中加入以下程式碼:

    drive/quickstart/src/main/java/Drivequickstart.java
    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.javanet.NetHttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.drive.Drive;
    import com.google.api.services.drive.DriveScopes;
    import com.google.api.services.drive.model.File;
    import com.google.api.services.drive.model.FileList;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;
    
    /* class to demonstarte use of Drive files list API */
    public class DriveQuickstart {
      /**
       * Application name.
       */
      private static final String APPLICATION_NAME = "Google Drive API Java Quickstart";
      /**
       * Global instance of the JSON factory.
       */
      private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
      /**
       * Directory to store authorization tokens for this application.
       */
      private static final String TOKENS_DIRECTORY_PATH = "tokens";
    
      /**
       * Global instance of the scopes required by this quickstart.
       * If modifying these scopes, delete your previously saved tokens/ folder.
       */
      private static final List<String> SCOPES =
          Collections.singletonList(DriveScopes.DRIVE_METADATA_READONLY);
      private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
    
      /**
       * Creates an authorized Credential object.
       *
       * @param HTTP_TRANSPORT The network HTTP Transport.
       * @return An authorized Credential object.
       * @throws IOException If the credentials.json file cannot be found.
       */
      private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT)
          throws IOException {
        // Load client secrets.
        InputStream in = DriveQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
        if (in == null) {
          throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
        }
        GoogleClientSecrets clientSecrets =
            GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
    
        // Build flow and trigger user authorization request.
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
        Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
        //returns an authorized Credential object.
        return credential;
      }
    
      public static void main(String... args) throws IOException, GeneralSecurityException {
        // Build a new authorized API client service.
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
            .setApplicationName(APPLICATION_NAME)
            .build();
    
        // Print the names and IDs for up to 10 files.
        FileList result = service.files().list()
            .setPageSize(10)
            .setFields("nextPageToken, files(id, name)")
            .execute();
        List<File> files = result.getFiles();
        if (files == null || files.isEmpty()) {
          System.out.println("No files found.");
        } else {
          System.out.println("Files:");
          for (File file : files) {
            System.out.printf("%s (%s)\n", file.getName(), file.getId());
          }
        }
      }
    }

執行範例

  1. 執行範例:

    gradle run
    
  2. 首次執行範例時,系統會提示您授予存取權:

    1. 如果您尚未登入 Google 帳戶,系統會提示您登入帳戶。如果您登入多個帳戶,請選取一個要授權的帳戶。
    2. 然後點選 [Accept]

    授權資訊會儲存在檔案系統中,因此當您下次執行程式碼範例時,系統不會提示您授權。

您已成功建立第一個向 Google Drive API 發出要求的 Java 應用程式。

後續步驟