2013-05-12 117 views
1

我想從URL下載文件並將其存儲到文件系統中。但是,我有內存限制,我不想將它存儲在內存中。我不是一個java專家,我有點失去了所有類的InputStream,BufferedReader,FileOutputStream等,請問你能幫我嗎?從URL到文件的流文件不存儲在內存中

現在我有:

URLConnection ucon = url.openConnection(); 
ucon.connect(); 
InputStream is = ucon.getInputStream(); 
// Create a reader for the input stream. 
BufferedReader br = new BufferedReader(isr); 

// ? 

FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE); 
// Here the content can be too big for the memory... 
fos.write(content.getBytes()); 
fos.close(); 

請,你能不能給我一些線索?我也想通過塊讀它大塊,但我不知道什麼是最簡單的與Java ...

+1

'「我是一個Java專家,我有點所有的類InputStream,BufferedReader類,FileOutputStream中輸了...」' - 你的意思是說,你是不是** **一位Java專家?因爲這個陳述的兩個部分沒有意義。 – 2013-05-12 22:32:01

+0

是的,我修好了。 – 2013-05-12 22:32:51

+0

太好了,謝謝。這更有意義。你有什麼樣的「記憶限制」,爲什麼?你目前的代碼如何工作? – 2013-05-12 22:33:19

回答

1

可以使用apache commons

org.apache.commons.io.FileUtils.copyURLToFile(URL, File) 

我猜它可能不會在Android 工作我用這個代碼

InputStream input = connection.getInputStream(); 
byte[] buffer = new byte[4096]; 
int cnt = - 1; 

OutputStream output = new FileOutputStream(file); 
while ((cnt = input.read(buffer)) != -1) 
{ 
    output.write(buffer, 0, cnt); 
} 
output.close(); 
+0

這個庫在android平臺上可用嗎?如果不是,是否建議包括這個庫? – 2013-05-12 22:36:52

+0

通常使用帶有connectionTimeout和readTimeout參數的那個方法的版本會更好 - 否則,在某些情況下,您可能會發現阻塞的時間太長,無法接受。 – GreyBeardedGeek 2013-05-12 22:37:11