Возвращает путь к папке файла на Google Диске

#java #class #google-drive-api #filepath

#java #класс #google-drive-api #путь к файлу

Вопрос:

Я пытаюсь вернуть и получить путь к папке файла Google Диска. Я передаю входные данные: идентификатор папки, имя файла и токен oauth.

{ «id»: «1dVkHw5442B7wMidj», «name»: «Path» }

Класс, который я использую ниже:

  public static  List<File>  Search(Object payload,String oauthToken) {
       List<File> list = new ArrayList<File>(); 
       List<File> subfolderlist = new ArrayList<File>(); 
       List<File> subQuerylist = new ArrayList<File>();
       GoogleCredential credential = new GoogleCredential(); 
       credential.setAccessToken(oauthToken);
       try {
            _driveService = new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), credential).setApplicationName(appName).build();
        } catch (GeneralSecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
       try {
           String filename ="";String mimeType ="";
           String modifiedFrom ="";String modifiedTo ="";String fullText ="";
           ObjectMapper mapper = new ObjectMapper();
           String jsonString =null;  String paramquery ="";  
            jsonString = mapper.writeValueAsString(payload);
            JSONObject jsonObject = new JSONObject(jsonString); 
            String parentId = jsonObject.getString("id");
            if(!jsonObject.isNull("name")){
             filename = jsonObject.getString("name");
             paramquery  =" and ( name contains '"   filename   "' or  fullText  contains   '"   filename    "')";
            }
            if(!jsonObject.isNull("content")){
                fullText  = jsonObject.getString("content");
                 paramquery  =" and  fullText  contains   '"   fullText    "'";
            }
            if(!jsonObject.isNull("mimeType")){
                mimeType = jsonObject.getString("mimeType");
                if(mimeType.equals("AllFiles") ){
                 paramquery  =" and mimeType != 'application/vnd.google-apps.folder'"; 
                }else {
                 paramquery  =" and  mimeType =  '"   mimeType   "'";
                }
            }
            if(!jsonObject.isNull("modifiedFrom")){
                modifiedFrom = jsonObject.getString("modifiedFrom");
                 paramquery  =" and modifiedTime >   '"   modifiedFrom   "'";
            }
            if(!jsonObject.isNull("modifiedTo")){
                modifiedTo = jsonObject.getString("modifiedTo");
                 paramquery  =" and  modifiedTime <   '"   modifiedTo   "'";
            }
            
            String subfolderquery = " and mimeType = 'application/vnd.google-apps.folder'"; 
            subfolderlist = ExecQuery(_driveService,subfolderquery,parentId); 
             list = ExecQuery(_driveService,paramquery,parentId); 
             int i = 0;
             while (i < subfolderlist.size()) {
                 File file = subfolderlist.get(i);
                 subQuerylist = ExecQuery(_driveService,subfolderquery,file.getId());
                 if(!subQuerylist.isEmpty()) {
                     subfolderlist.addAll(subQuerylist);
                 } 
                 i  ;
             }
             
             int j = 0;
             while (j < subfolderlist.size()) {
                 File file = subfolderlist.get(j);
                 subQuerylist = ExecQuery(_driveService,paramquery,file.getId());
                 if(!subQuerylist.isEmpty()) {
                     list.addAll(subQuerylist);
                 } 
                 j  ;
             }
           
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        return list; 
    }
  

Но он возвращает мне только сведения о файле и идентификатор родительской папки.

Как я могу получить полный путь к файлу?

Ответ №1:

Файлы и папки на диске не имеют путей

У них есть родители, но родительским элементом является свойство, а не местоположение файла. Пути, предполагаемые путем следования вложенности папок и вложенных папок, носят творческий характер.

Причина, по которой файл Google Диска не может иметь путь, заключается в том, что в одной папке могут быть два разных файла разного mimeType с одинаковым именем. Также на данный момент (будет устаревшим в будущем) у файла может быть одновременно несколько родителей.

Самое близкое, что вы можете сделать, чтобы понять иерархию вложенности файлов во вложенных папках, — это итеративно перебирать родительский родительский файл, пока не дойдете до root — «Мой диск».