Problem, który miałem, to jak utworzyć ścieżkę folderów na dysku Google, nie kończąc się na duplikatach folderów w katalogu dirve!
pierwsza funkcja służy do sprawdzania, gdzie folder jest występować z jej tytułu, przechodzą instancji napędowy i tytuł folderu i to rodzicom ID (nie tytuł):
/**
*
* @param service google drive instance
* @param title the title (name) of the folder (the one you search for)
* @param parentId the parent Id of this folder (use root) if the folder is in the main directory of google drive
* @return google drive file object
* @throws IOException
*/
private File getExistsFolder(Drive service,String title,String parentId) throws IOException
{
Drive.Files.List request;
request = service.files().list();
String query = "mimeType='application/vnd.google-apps.folder' AND trashed=false AND title='" + title + "' AND '" + parentId + "' in parents";
Logger.info(TAG + ": isFolderExists(): Query= " + query);
request = request.setQ(query);
FileList files = request.execute();
Logger.info(TAG + ": isFolderExists(): List Size =" + files.getItems().size());
if (files.getItems().size() == 0) //if the size is zero, then the folder doesn't exist
return null;
else
//since google drive allows to have multiple folders with the same title (name)
//we select the first file in the list to return
return files.getItems().get(0);
}
funkcja używana do utwórz folder wewnątrz referencji rodziców givien, jeśli lista jest pusta, folder zostanie utworzony w katalogu głównym dysku Google.
/**
*
* @param service google drive instance
* @param title the folder's title
* @param listParentReference the list of parents references where you want the folder to be created,
* if you have more than one parent references, then a folder will be created in each one of them
* @return google drive file object
* @throws IOException
*/
private File createFolder(Drive service,String title,List<ParentReference> listParentReference) throws IOException
{
File body = new File();
body.setTitle(title);
body.setParents(listParentReference);
body.setMimeType("application/vnd.google-apps.folder");
File file = service.files().insert(body).execute();
return file;
}
trzecia funkcja służy do tworzenia ścieżki katalogów folderów bez duplikatów w napędzie google. , aby zapobiec duplikowaniu folderów na dysku google, funkcja sprawdzi, czy folder istnieje, czy nie, przed jego utworzeniem.
/**
*
* @param service google drive instance
* @param titles list of folders titles
* i.e. if your path like this folder1/folder2/folder3 then pass them in this order createFoldersPath(service, folder1, folder2, folder3)
* @return parent reference of the last added folder in case you want to use it to create a file inside this folder.
* @throws IOException
*/
private List<ParentReference> createFoldersPath(Drive service,String...titles) throws IOException
{
List<ParentReference> listParentReference = new ArrayList<ParentReference>();
File file = null;
for(int i=0;i<titles.length;i++)
{
file = getExistsFolder(service, titles[i], (file==null)?"root":file.getId());
if (file == null)
{
file = createFolder(service, titles[i], listParentReference);
}
listParentReference.clear();
listParentReference.add(new ParentReference().setId(file.getId()));
}
return listParentReference;
}
Jeśli chcesz podzielić się z nami swoją wiedzą, możesz edytować swój wpis, aby zawierał tylko pytanie, a następnie publikować resztę jako odpowiedź. Możesz odpowiedzieć na własne pytanie i ułatwia to zrozumienie postów :) –