2012-03-12 22 views
-2

我想製作一個Java下載程序,它將從url下載數據到某個本地默認文件夾,例如/ tmp/data。Java:mkdir by url source

但是,如果URL類似於:www.site.com/book/1.html,我想將文件1.html保存到/tmp/data/book/1.html中。

我不知道如何遞歸mkdir,我的意思是自動創建「book」文件夾。

我做的計劃,使文件的代碼是這樣的:

String dataDir = "/tmp/data"; 
URL url = new URL("http://www.site.com/book/1.html"); 
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(dataDir+url.getFile()))); 
bw.write(data.toString()); 
bw.close(); 

回答

3

您可以使用mkdirs

File dataDir = new File("/tmp/data"); 
URL url = new URL("http://www.site.com/book/1.html"); 
final File targetFile = new File(dataDir, url.getFile()); 
final File targetDir = targetFile.getParentFile(); 
if (!targetDir.exists() && !targetDir.mkdirs()) { 
    throw new SomeException("Failed to create parent directory " + targetDir); 
} 
// continue using targetFile 

正如你看到的我還用File來代表每一條路徑,爲類型安全和清晰的緣故。

最後但並非最不重要的:如果你只需要下載一個HTML文件,我不使用String持有其內容,因爲得到正確String你需要知道編碼的HTML文件。將它作爲byte[]來處理會更容易,它可以避免所有與編碼相關的問題。

2

您可以通過使用File類的mkdirs方法讓Java爲您創建dirs。例如:

String dataDir = "/tmp/data"; 
Sring filename = "book/1.html"; 

//this will create all directories recursively as necessary 
File out = new File(dataDir, filename); 
out.mkdirs(); 

BufferedWriter bw = new BufferedWriter(new FileWriter(out)); 
URL url = new URL("http://www.site.com/" + filename); 

// get data of URL and write it into your writer 

bw.close(); 
+0

非常感謝! – remy 2012-03-12 08:36:34