2014-11-22 38 views
1

我有像this link這樣的鏈接,它直接詢問要保存的文件名,並開始在瀏覽器中下載。下載/保存可從給定的URL直接獲得的文件

如何以編程方式下載或保存此文件?

我試着用下面的方法:

static void DownloadFile(String url, String fileName) throws MalformedURLException, IOException 
{ 
    url = "http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=DESCRIBE+<"+ url +">&format=text%2Fcsv"; 
    URL link = new URL(url); //The file that you want to download 

    InputStream in = new BufferedInputStream(link.openStream()); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    byte[] buf = new byte[1024]; 
    int n = 0; 
    while (-1!=(n=in.read(buf))) 
    { 
     out.write(buf, 0, n); 
    } 
    out.close(); 
    in.close(); 
    byte[] response = out.toByteArray(); 

    FileOutputStream fos = new FileOutputStream(fileName); 
    fos.write(response); 
    fos.close(); 
    System.out.println("Finished"); 
} 

但這保存只具有第一線「」對象「‘上游’,‘對象’ 」,而不是完整的文件的文件。

編輯:

正如在回答中我嘗試以下建議,但也只給了該文件的第一行:

static void DownloadFile(String s_url, String fileName) throws MalformedURLException, IOException 
{ 
    s_url = "http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=DESCRIBE+<"+ s_url +">&format=text%2Fcsv"; 
    //url = "http://dbpedia.org/data/Sachin_Tendulkar.rdf"; 
    try { 
     URL url = new URL(s_url); //The file that you want to download 

     // read text returned by server 
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
     PrintWriter out = new PrintWriter(fileName); 

     String line; 
     while ((line = in.readLine()) != null) { 
      out.println(line); 
     } 
     in.close(); 
     out.close(); 
    } 
    catch (MalformedURLException e) { 
     System.out.println("Malformed URL: " + e.getMessage()); 
    } 
    catch (IOException e) { 
     System.out.println("I/O Error: " + e.getMessage()); 
    } 
    System.out.println("Finished"); 
} 

編輯:

我也嘗試了Apache FileUtils,但是這也只給出了文件的第一行。

static void DownloadFile(String s_url, String fileName) throws MalformedURLException, IOException 
{ 
    s_url = "http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=DESCRIBE+<"+ s_url +">&format=text%2Fcsv"; 
    URL url = new URL(s_url); //The file that you want to download 
    FileUtils.copyURLToFile(url, new File(fileName)); 
    System.out.println("Finished"); 
} 

回答

0
,如果你想下載一個文件

,阿帕奇百科全書剛纔你在找什麼,偉大工程!

org.apache.commons.io.FileUtils.copyURLToFile(new URL("URL")), new File("path/to/file")); 

如果URL返回文本,你可以嘗試這樣的事:

try { 
     URL url = new URL("http://www.google.com:80/"); 

     // read text returned by server 
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
     PrintWriter out = new PrintWriter("filename.txt"); 

     String line; 
     while ((line = in.readLine()) != null) { 
      out.println(line); 
     } 
     in.close(); 
     out.close(); 
    } 
    catch (MalformedURLException e) { 
     System.out.println("Malformed URL: " + e.getMessage()); 
    } 
    catch (IOException e) { 
     System.out.println("I/O Error: " + e.getMessage()); 
    } 
+0

不,它也只給了該文件的第一行。 – 2014-11-22 13:32:10

+0

你能給我一個真實的鏈接樣本嗎? – Gurey 2014-11-22 13:36:06

+0

當然,請訪問此鏈接: http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=DESCRIBE+%3Chttp://dbpedia.org/resource/Sachin_Tendulkar%3E&format = text%2Fcsv – 2014-11-22 13:37:36

相關問題