Como baixar um PDF de uma dada URL em Java?

quero fazer uma aplicação Java que, quando executada, transfere um ficheiro de uma URL. Há alguma função que eu possa usar para fazer isso?

este pedaço de código só funcionou para um ficheiro .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();
Author: ArtB, 2013-11-28

1 answers

Pode abrir a ligação usando a classe URL. Em seguida, basta ler a partir de seu InputStream e escrever os dados que você lê em seu arquivo.

(Este é um exemplo simplificado, você ainda precisa lidar com exceções e garantir o fechamento de fluxos em lugares certos)

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");

Desde o Java 7 Também podemos usar

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();
 25
Author: Pshemo, 2018-05-09 16:37:31