2014-01-27 145 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