我正在尝试获取Google云端硬盘特定部分(驱动器部分)中的所有文件。
这些是我要找的文件:
您可以看到名为Projet 3
的文件夹和名为Processus TP2 questions
的文件。在文件夹中我只有一个文件。
但是当我尝试列出所有文件时,我收到了数千个文件。如果我使用Google云端硬盘顶部的搜索栏搜索它们,它会找到它们,但我不知道它们在哪里(也许是Gmail附件?)。
这是我的搜索查询:
FileList result = service.files().list()
.setQ("mimeType != 'application/vnd.google-apps.folder'
and trashed = false")
.setSpaces("drive")
.setFields("nextPageToken, files(id, name, parents)")
.setPageToken(pageToken)
.execute();
如何仅列出我在网络用户界面的驱动器部分/文件夹中可以看到的文件?
非常感谢。
答案 0 :(得分:6)
在查询中使用“parents”属性,如下所示:
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import java.util.AbstractMap;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("name","chris");
map.put("island","faranga");
XStream magicApi = new XStream();
magicApi.registerConverter(new MapEntryConverter());
magicApi.alias("root", Map.class);
String xml = magicApi.toXML(map);
System.out.println("Result of tweaked XStream toXml()");
System.out.println(xml);
Map<String, String> extractedMap = (Map<String, String>) magicApi.fromXML(xml);
assert extractedMap.get("name").equals("chris");
assert extractedMap.get("island").equals("faranga");
}
public static class MapEntryConverter implements Converter {
public boolean canConvert(Class clazz) {
return AbstractMap.class.isAssignableFrom(clazz);
}
public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
AbstractMap map = (AbstractMap) value;
for (Object obj : map.entrySet()) {
Map.Entry entry = (Map.Entry) obj;
writer.startNode(entry.getKey().toString());
Object val = entry.getValue();
if ( null != val ) {
writer.setValue(val.toString());
}
writer.endNode();
}
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
Map<String, String> map = new HashMap<String, String>();
while(reader.hasMoreChildren()) {
reader.moveDown();
String key = reader.getNodeName(); // nodeName aka element's name
String value = reader.getValue();
map.put(key, value);
reader.moveUp();
}
return map;
}
}
}
如果要列出特定文件夹而不是root的内容 - 请在查询中使用该文件夹的id而不是“root”。
答案 1 :(得分:1)
您实际上可以通过发送包含Files: list中给出的所有适用参数的HTTP请求来检索文件列表。
此示例代码在文档中给出:
private static List<File> retrieveAllFiles(Drive service) throws IOException {
List<File> result = new ArrayList<File>();
Files.List request = service.files().list();
do {
try {
FileList files = request.execute();
result.addAll(files.getItems());
request.setPageToken(files.getNextPageToken());
} catch (IOException e) {
System.out.println("An error occurred: " + e);
request.setPageToken(null);
}
} while (request.getPageToken() != null &&
request.getPageToken().length() > 0);
return result;
}
除此之外,您可能需要考虑使用可用的范围,例如请求完整的驱动器范围,因为您需要列出或重新组织用户驱动器中的文件,如Choose Auth Scopes中所述。
请求格式:
(https://www.googleapis.com/auth/drive)