我正在嘗試使用Dropbox V2 API將我的應用程序數據文件(SQLite和首選項)從我的Android應用程序上傳到我的Dropbox帳戶。我可以成功啓動客戶端:Dropbox V2 uploadBuilder:「字符串'路徑'不匹配模式」
// Dropbox authentication
config = new DbxRequestConfig("dropbox/liikennevalot");
client = new DbxClientV2(config, ACCESS_TOKEN);
我的應用程序內容的鏈接已到,列出我的用戶憑據:
FullAccount account = client.users().getCurrentAccount();
我可以列出我的應用程序的Dropbox目錄中的文件:
ListFolderResult result = client.files().listFolder("");
while (true) {
for (Metadata metadata : result.getEntries()) {
Log.d("DROPBOX", metadata.getPathLower());
}
if (!result.getHasMore()) {
break;
}
result = client.files().listFolderContinue(result.getCursor());
}
但是當試圖從Android上傳到Dropbox應用程序根目錄時
try (InputStream in = new FileInputStream(getExternalFilesDir(null) + "/" + "testi.txt")) {
FileMetadata metadata = client.files().uploadBuilder("")
.withMode(WriteMode.OVERWRITE)
.uploadAndFinish(in);
}
我得到一個異常
java.lang.IllegalArgumentException: String 'path' does not match pattern
指向與client.files)的代碼行(uploadBuilder(「」)......
檢查異常堆棧,我發現,在Dropbox的API V2,類CommitInfo有一個構造函數,這是給我這個例外
} else if(!Pattern.matches("(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)", path)) {
throw new IllegalArgumentException("String \'path\' does not match pattern");
我不知道足夠的Java正則表達式使從正則表達式任何意義,所以我真的不知道是什麼原因造成了我這個異常。 Dropbox API V2文檔說「」表示Dropbox中應用程序的根文件夾,因此我的client.files()。uploadBuilder(「」)...應該是完美有效的代碼。我也嘗試在我的應用程序的Dropbox目錄下創建一個子目錄「test」,並將代碼更改爲client.files()。uploadBuilder(「test」)...但我每次都得到相同的異常。
任何人都可以幫我解釋一下REGEX,這樣可以讓我知道我的代碼出了什麼問題嗎?
傳入的字符串與模式不匹配是什麼? –
好問題,我沒有答案。我只知道我試圖傳遞給uploadBuilder()方法的內容:「」和「test」觸發異常。我猜這個字符串可能是Windows文件路徑,因爲Dropbox文件夾不過是普通文件夾。 – user3062660