2012-09-04 63 views
3

我正在嘗試下載Latex公式的圖像文件。以下是我使用使用scala下載圖像文件

var out: OutputStream = null; 
    var in: InputStream = null; 

    try { 
     val url = new URL("http://latex.codecogs.com/png.download?$$I=\frac{dQ}{dt}$$") 

     val connection = url.openConnection().asInstanceOf[HttpURLConnection] 
     connection.setRequestMethod("GET") 
     in = connection.getInputStream 
     val localfile = "sample2.png" 
     out = new BufferedOutputStream(new FileOutputStream(localfile)) 
     val byteArray = Stream.continually(in.read).takeWhile(-1 !=).map(_.toByte).toArray 

     out.write(byteArray) 
    } catch { 
     case e: Exception => println(e.printStackTrace()) 
    } finally { 
     out.close 
     in.close 
    } 

代碼我可以下載,但它沒有下載完整的圖像,期望的圖片尺寸約爲517個字節,但它是隻下載275個字節。它可能出了什麼問題。附上不完整和完整的圖像。請幫幫我。我已經使用相同的代碼來下載超過1MB大小的文件,它可以正常工作。

Incomplete image

Expected image

+0

難道你看看[斯卡拉-IO ](http://jesseeichar.github.com/scala-io-doc/0.4.1-seq/index.html#!/overview)? – sschaef

回答

9

你傳遞一個錯誤的字符串時,"\f"被解釋爲轉義序列,併爲您提供了一個單一的"form feed"字符。

更好:

val url = new URL("http://latex.codecogs.com/png.download?$$I=\\frac{dQ}{dt}$$") 

val url = new URL("""http://latex.codecogs.com/png.download?$$I=\frac{dQ}{dt}$$""") 
+0

謝謝。它正在工作。得到了錯誤。 – Srinivas

2

另外一種方式是使用系統命令是乾淨多了

import sys.process._ 
import java.net.URL 
import java.io.File 

new URL("""http://latex.codecogs.com/png.download?$$I=\frac{dQ}{dt}$$""") #> new File("sample2.png") !! 
+0

如何跟蹤命令執行完成的時間? –

+0

有關sys.process的更多信息,因爲我之前沒有看到這個信息:http://www.scala-lang.org/api/current/index.html#scala.sys.process.package – Arthur