2014-01-27 102 views
-1

即时通讯使用dropbox api。当我问API来从我的账户获取文件列表,它给了我这个元数据是不是在我所知道的任何特定的格式:解析Java中的文件

magnum-opus.txt: File("/magnum-opus.txt", iconName="page_white_text", mightHaveThumbnail=false, numBytes=17734, humanSize="17.3 KB", lastModified="2014/01/27 05:19:30 UTC", clientMtime="2014/01/27 05:19:30 UTC", rev="11e6c9e5e")

因为我不是与字符串我是好人希望如果有人能够帮助我找到一种方法来提取至少文件名(“/magnum-opus.txt”)和上面的“最后修改”和“人化”位。请和谢谢:)

+0

Java或C++请选择一个 – BackSlash

+1

要么,我就是。需要一种方法来做:) – Javed

+1

也许你应该尝试使用字符串变得更好。这是一个很糟糕的借口。 – Kayaman

回答

2

假设你正在使用官方Java SDK中的元数据方法之一(如getMetadata),这听起来像你正在做toString并尝试手动解析这个,这是不必要的。该元数据方法返回一个DbxEntry(你可以使用asFile转换为DbxEntry.File然后,您可以直接访问你想要的对象的信息,例如:。。?

DbxEntry.File fileInfo; 
    try { 
     fileInfo = dbxClient.getMetadata("/test.txt").asFile(); 
    } 
    catch (DbxException ex) { 
     ex.printStackTrace(); 
     System.err.println("Error in getMetadata(): " + ex.getMessage()); 
     System.exit(1); return; 
    } 
    System.out.println("fileInfo name: " + fileInfo.name); 
    System.out.println("fileInfo lastModified: " + fileInfo.lastModified); 
    System.out.println("fileInfo humanSize: " + fileInfo.humanSize); 
+0

哇,我不知道我怎么可能错过了,再次感谢! @格雷格 – Javed

1

只是字符串扮演...

String in = "magnum-opus.txt: File(\"/magnum-opus.txt\", iconName=\"page_white_text\", mightHaveThumbnail=false, numBytes=17734, humanSize=\"17.3 KB\", lastModified=\"2014/01/27 05:19:30 UTC\", clientMtime=\"2014/01/27 05:19:30 UTC\", rev=\"11e6c9e5e\")"; 
String insideParenth = in.substring(in.indexOf("(")+1, in.length()-1); 
StringTokenizer tokenizer = new StringTokenizer(insideParenth, ", "); 
while (tokenizer.hasMoreTokens()) { 
    Map<String,String> properties = new HashMap<String,String>(); 
    String token = tokenizer.nextToken(); 
    if(token.contains("=")){ 
     token = token.replaceAll("\"", ""); 
     String left= token.substring(0, token.indexOf("=")); 
     String right=token.substring(token.indexOf("=")+1); 
     properties.put(left,right); 
     System.out.println("left:["+left+"] and right=[" + right + "]");   
    } 
} 

输出是:

left:[iconName] and right=[page_white_text] 
left:[mightHaveThumbnail] and right=[false] 
left:[numBytes] and right=[17734] 
left:[humanSize] and right=[17.3] 
left:[lastModified] and right=[2014/01/27] 
left:[clientMtime] and right=[2014/01/27] 
left:[rev] and right=[11e6c9e5e] 

编辑:

String titleWithPath, titleWithoutPath; 

insideParenth = in.substring(in.indexOf("(")+1, in.length()-1); 
titleWithPath = insideParenth.substring(insideParenth.indexOf("\"")+1, insideParenth.indexOf(",")‌​-1); 
System.out.println(titleWithPath); //Prints out: "/magnum-opus.txt" 

String titleWithoutPath = insideParenth.substring(insideParenth.indexOf("/")+1, insideParenth.indexOf(",")-1); 
System.out.println(titleWithoutPath); //Prints out: "magnum-opus.txt" 
+0

有没有办法提取“/magnum-opus.txt”? – Javed

+0

添加了几行^ __^ –

+0

非常感谢。欣赏它马恩! – Javed

0

首先拆下字符串的一部分达到File(

String theString = "magnum-opus.txt: File("/magnum-opus.txt", iconName="page_white_text", mightHaveThumbnail=false, numBytes=17734, humanSize="17.3 KB", lastModified="2014/01/27 05:19:30 UTC", clientMtime="2014/01/27 05:19:30 UTC", rev="11e6c9e5e")"; 

theString = theString.replaceAll("^.*.File\\(",""); 

然后删除最后一个字符“(”。

theString = theString.replaceAll("\\)",""); 

然后你可以只进行拆分得到的信息

HashMap<String,String> results = new HashMap<String,String>(); 
String[] arr = theString.split(","); 
for(String s : arr) { 
    s = s.replace("\"",""); 
    s = s.trim(); 
    if(s.contains("=")) { 
    String[] tmp = s.split("="); 
    results.put(tmp[0],tmp[1]); 
    } 
    else { 
    results.put("filename",s); 
    } 
} 

上面应该产生关键的一个HashMap,从该字符串值。

+0

它给了我一个错误: 'String [] arr = theString.split(',');' 它说没有合适的方法找到拆分(字符) – Javed

+0

@Javed使用双引号。 –

+1

@Javed是我的错误,单引号意味着一个字符类型。双引号是字符串 – AbstractChaos