Preciso abrir uma url e de lá ler todo o seu conteúdo binário, posteriormente
armazenando em um arquivo local.
No java tem um monte de classes para Stream, mas qual seria
a mais recomentada neste caso?
Qual é a forma mais rápida e segura de se fazer isso?
[]'s
Robert
Não sei se entendi bem, mas o que você quer é criar um Servlet que envie um arquivo ao usuario quango for acessado?
Se for, é só escrever o conteudo do arquivo na saída do Servlet e mudar o Content-Type para application/octet-stream
Se não for isso, explique melhor
Seria uma aplicação desktop (swing) baixando arquivos binários da internet e
armazenando em uma pasta no disco local para depois acessar os arquivos.
Uma espécie de “cache”, para não ter que ficar baixando várias vezes um
arquivo para, por exemplo, visualizar uma imagem.
Ahh tá, veja um exemplo:
[code]URL url = new URL(“http://java.sun.com/images/getjava_med.gif”);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
InputStream in = con.getInputStream();
OutputStream out = new FileOutputStream(“C:/getjava_med.gif”);
int b;
while((b=in.read())>-1){
out.write(b);
}
out.close();
in.close();
con.disconnect();[/code]
Olha só o código que eu montei, utilizando singleton e thread…
[code]public class Downloader implements Runnable {
public static Downloader instance;
private String[] image;
private Downloader(String[] image) {
setImage(image);
}
public static Downloader getDefaultDownloader(String[] image) {
if (instance == null) instance = new Downloader(image);
return instance;
}
public static Downloader createDownloader(String[] image) {
return new Downloader(image);
}
public void setImage(String[] image) {
this.image = image;
}
public void run() {
try {
downloadImage(image);
} catch (UnknownHostException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void downloadImage(String[] image) throws UnknownHostException, IOException {
String imageFolder = createImageFolder();
for (int index=0; index<image.length; index++) {
System.out.println("downloading from "+image[index]);
try {
URL url = new URL(image[index]);
BufferedInputStream bis = new BufferedInputStream(url.openStream());
DataInputStream dis = new DataInputStream(bis);
String[] split = image[index].split("/");
String pathName = imageFolder+File.separator+split[split.length-1];
System.out.println("downloading to "+pathName);
File file = new File(pathName);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
while (dis.read(buffer) != -1) {
fos.write(buffer);
}
fos.close();
dis.close();
bis.close();
}
catch(EOFException eof){
System.out.println("Downloader.EOFException: " + eof.getMessage() );
}
catch(IOException ioe){
System.out.println("Downloader.IOException: " + ioe.getMessage() );
}
catch(Exception e){
System.out.println("Downloader.Exception: " + e.getMessage() );
}
}
}
private String createImageFolder() {
// TODO: criar a pasta de armazenamento local das imagens
return null;
}
}[/code]
Ainda não testei o código, mas a minha preocupação principal é com as classes de streaming de dados. Preciso que seja o mais rápido e seguro possivel e o java tem uma pilha de Streammers…
O que tu me diz do código? Está mais ou menos?
Grato pela ajuda!