Скачать / сохранить файл, который можно получить непосредственно по указанному URL

1

У меня есть ссылки, подобные &format=text%2Fcsv rel=nofollow>этой ссылке, которые напрямую запрашивают имя файла для сохранения и начинают загрузку в браузере.

Как я могу загрузить или сохранить этот файл программно?

Я попробовал следующий метод:

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");
}
Теги:
download

1 ответ

0

если вы хотите скачать файл, Apache Commons имеет только то, что вы ищете, отлично работает!

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
    Нет, он тоже дал только первую строку файла.
  • 0
    Можете ли вы дать мне реальный образец ссылки?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню