2013-11-28 2 views
8

Я хочу сделать приложение Java, которое при выполнении загружает файл с URL-адреса. Есть ли какая-нибудь функция, которую я могу использовать для этого?Как загрузить PDF-файл из заданного URL-адреса в Java?

Этот фрагмент кода работает только для .txt файла:

URL url= new URL("http://cgi.di.uoa.gr/~std10108/a.txt"); 
BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream())); 
PrintWriter writer = new PrintWriter("file.txt", "UTF-8"); 

String inputLine; 
while ((inputLine = in.readLine()) != null){ 
    writer.write(inputLine+ System.getProperty("line.separator"));    
    System.out.println(inputLine); 
} 
writer.close(); 
in.close(); 
+0

возможный дубликат [ Загрузите файл, пропустив URL-адрес с помощью java-кода] (http://stackoverflow.com/questions/2302233/download-file-by-passing-url-using-java-code) –

+2

Это не то же самое, поскольку я не хочу donwload весь сайт, но файл его! Спасибо хоть! – JmRag

ответ

23

Вы можете открыть соединение с помощью URL класса. Затем просто прочитайте из InputStream и напишите данные, которые вы читаете в своем файле.

(это упрощенные примеры, вам все еще нужно обрабатывать исключения и обеспечить закрытие потоков по своему усмотрению)

System.out.println("opening connection"); 
URL url = new URL("https://upload.wikimedia.org/wikipedia/en/8/87/Example.JPG"); 
InputStream in = url.openStream(); 
FileOutputStream fos = new FileOutputStream(new File("yourFile.jpg")); 

System.out.println("reading from resource and writing to file..."); 
int length = -1; 
byte[] buffer = new byte[1024];// buffer for portion of data from connection 
while ((length = in.read(buffer)) > -1) { 
    fos.write(buffer, 0, length); 
} 
fos.close(); 
in.close(); 
System.out.println("File downloaded"); 

Поскольку Java 7 мы можем также использовать

URL url = new URL("https://upload.wikimedia.org/wikipedia/en/8/87/Example.JPG"); 
InputStream in = url.openStream(); 
Files.copy(in, Paths.get("someFile.jpg"), StandardCopyOption.REPLACE_EXISTING); 
in.close(); 
+0

Вы имели в виду использовать оператор присваивания в качестве параметра цикла while? –

+0

@louiemcconnell Да. Эта логика такая же, как в первом примере: http://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html, но вместо чтения строк я читаю байты. – Pshemo

Смежные вопросы