eu to precisando executar algo que nunca fiz, a aplicação deve pegar arquivos de uma máquina e transferir pra outra. Os arquivos são txt, jpg, doc, xml. Alguns são bem grandes.
A máquina onde roda o programa é servidor web, e a pasta onde fica o destino é num servidor de arquivos em outra máquina.
Pesquisei aqui e outros lugares, e vi que recomendações por FTP, tentei fazer, mas deu erro.
Por exemplo, o caminho que preciso enviar os arquivos é este: \serpjto012\finan$\dept04\arquivos
Se eu digitar este caminho numa url, ele me leva até a essa pasta no servidor, mas quando tentei por FTP, ele dá erro.
Isto é uma pasta num servidor de arquivo, no caso pra funcionar ele deveria ser habilitado como servidor FTP, ou não precisa? não entendo muito sobre isso…
o cliente que vai rodar esta app tem acesso a rede de onde esta o arquivo origem e destino?
caso tenha é bem simples é só vc via uma app local (que roda no pc do cliente) acessar a rede onde esta o arquivo de origem copia-lo e depois acessar onde esta o seu destino e “colar” ele la…
caso não tenha acesso a rede vc tera que fazer a app fazer download do mesmo na maquina do cliente e depois upload para o server de destino… isto se vc não quiser usar ftp… dependendo da situação…
[quote=luistiagos]o cliente que vai rodar esta app tem acesso a rede de onde esta o arquivo origem e destino?
caso tenha é bem simples é só vc via uma app local (que roda no pc do cliente) acessar a rede onde esta o arquivo de origem copia-lo e depois acessar onde esta o seu destino e “colar” ele la…
caso não tenha acesso a rede vc tera que fazer a app fazer download do mesmo na maquina do cliente e depois upload para o server de destino…[/quote]
oi luistiagos, sim o arquivo vai estar junto da aplicação no servidor 1 digamos assim, ela tem acesso normal ao arquivo, já está com ele, não precisará fazer dowload. No caso é pegar este arquivo e mandar ele pra uma pasta no servidor 2, que minha aplicação tem acesso ao diretório.
A dúvida era, se o servidor 2, que é um servidor de arquivos, precisa ser configurado pra receber FTP, porque fiz uma classe usando FTP do java, e o arquivo não foi enviado.
Oi Carol,
Você pode usar o POI, java.io.FileOutputStream, FileInputStream e java.io.File.
Leia com POI, em seguida escreva o conteúdo do arquivo lido num FileOutPutStream, apontando para a máquina de destino.
Pode parecer complicado, mas acredite, é simples. Se quiser te mando exemplos por e-mail/msn
aqui: http://www.java2s.com/Code/Java/File-Input-Output/Input-Output-Stream.htm
tem bastentes exemplos para te ajudar…
mas lembre-se para poder “copiar-colar” de uma pasta para a outra ambas tenque ter permição a leitura (a da qual vc ira copiar o arquivo) e de escrita (a qual vc ira “colar” o arquivo…)
[quote=saviobarr]Oi Carol,
Você pode usar o POI, java.io.FileOutputStream, FileInputStream e java.io.File.
Leia com POI, em seguida escreva o conteúdo do arquivo lido num FileOutPutStream, apontando para a máquina de destino.
Pode parecer complicado, mas acredite, é simples. Se quiser te mando exemplos por e-mail/msn
[]´s
Sávio[/quote]
entendi, mas este procedimento é bom no caso de arquivos grandes? não demoraria muito pela rede ? tem alguns arquivos bem grandes a serem enviados.
entendi, mas este procedimento é bom no caso de arquivos grandes? não demoraria muito pela rede ? tem alguns arquivos bem grandes a serem enviados.[/quote]
certa vez uma outra pessoa daqui do forum me deu um exemplo com nio, que é mais rapido… faz tempo mais me parece que te seria bem util…
Na verdade, se você tem acesso a rede então faz via comando copy do msdos…
seria assim:
public static void main(String[] args) throws IOException {
//buffer para pegar a saida.
byte[] b = new byte[1024];
// executa o comando no msdos
Process p = Runtime.getRuntime().exec("cmd /c copy arquivo_origem arquivo_destino");
// le a saida do commando
p.getInputStream().read(b);
// imprime na tela a saida do comando.
System.out.write(b);
}
o comando cmd /c é necessário ele é que executa o que for passado depois dele.
[quote=carlos.uneb]Na verdade, se você tem acesso a rede então faz via comando copy do msdos…
seria assim:
public static void main(String[] args) throws IOException {
//buffer para pegar a saida.
byte[] b = new byte[1024];
// executa o comando no msdos
Process p = Runtime.getRuntime().exec("cmd /c copy arquivo_origem arquivo_destino");
// le a saida do commando
p.getInputStream().read(b);
// imprime na tela a saida do comando.
System.out.write(b);
}
o comando cmd /c é necessário ele é que executa o que for passado depois dele.
[quote=carlos.uneb][quote=carlos.uneb]Na verdade, se você tem acesso a rede então faz via comando copy do msdos…
seria assim:
public static void main(String[] args) throws IOException {
//buffer para pegar a saida.
byte[] b = new byte[1024];
// executa o comando no msdos
Process p = Runtime.getRuntime().exec("cmd /c copy arquivo_origem arquivo_destino");
// le a saida do commando
p.getInputStream().read(b);
// imprime na tela a saida do comando.
System.out.write(b);
}
o comando cmd /c é necessário ele é que executa o que for passado depois dele.
Mas o que se quer é resolver o problema, já para se ter portabilidade, você deve fazer IO via NIO aqui no guj tem um tutorial sobre como copiar arquivos usando NIO.