Problema conexão, transferencia e manipulação de arquivo

40 respostas
R

Ola pessoal,
bem faz tempo q não mexo com o java e querendo voltar, decidi criar uma aplicação para manipular um arquivo excel, blz até ai tudo bem, mas ai querendo avançar mais, decidi manipular este arquivo de outro computador, mas não sei como fazer…
gostaria de uma ajuda nessa parte…

desde já agradeço.

40 Respostas

D

Baixe o arquivo via rede, (seja http, ssh…)

R

tipo to querendo manipular ele no local que ele está

D

Sim, mas de uma forma (seja por Stream) ou de outra (baixando ele completament [abstraindo o stream]) voce vai trazer o conteudo para o computador que vai fazer o processamento. Pode usar Stream e coloca-lo num servidor web (apache http, ou tomcat) via rede mesmo (samba).

R

mmmmm entendi, poderia me ajudar, pelo menos com um exemplo se não for pedir muito…

R

desculpa, dei uma olhada no Stream e não sei se é isso, deixa eu explicar melhor…

tem o arquivo A no pc B, quero manipular o arquivo A do pc C mas deixar no pc B… ± isso… isso seria possível?

M

Então cara, se você quiser manipular o arquivo no computador onde o arquivo está, basta você usar a seguinte estrutura:

BufferedReader bufferedReader = new BufferedReader(new FileInputStream("arquivo"));

O objeto bufferedReader possui os métodos de leitura para manipular o arquivo.
É essa a sua dúvida?

R

quase la, é mais de como eu consigo pegar o arquivo se ele está em outro computador…
desculpe minha ignorância.

R

acho que meu problema está em como fazer pra acessar o outro pc, procurar o arquivo, trazer esse arquivo para aplicação que está no meu pc, modificar o conteúdo do arquivo e mandar de volta para o pc de origem.

Não consigo começar…ajuda por favor

M

Ai o problema deixa de ser manipulação de arquivo. Proce ver como se manipula sockets. Aqui no GUJ tem um ótimo artigo sobre manipulação de sockets.
Abs.

R

sim, mas ai vou precisar de fazer isso também no pc que está o arquivo?

R

vc precisa do servidor e do cliente pra trabalhar com os sockets… logico…

a nao ser que faz via web nesse caso o usuario precisa aceitar a manipulação do arquivo e vc faz o que disseram ae de usar stream e alterar…

se vc pensa em manipular sem programa cliente, o consentimento do cliente ou algo assim, dae ja nem da

R

Pronto consegui uma conexao com outro pc, mas apenas chat, agora vem o problema de como juntar o chat com o manipulador de arquivo…vou postar os codigos a seguir.

R

os codigos do chat

Servidor.java

import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Servidor {

	public static void main(String[] args) throws IOException {
		new Servidor(12345).executa();
	}

	private int porta;
	private boolean encerrar;
	private List<PrintStream> clientes;

	public Servidor(int porta) {
		this.porta = porta;
		this.clientes = new ArrayList<PrintStream>();
	}

	private void executa() throws IOException {
		ServerSocket servidor = new ServerSocket(this.porta);
		System.out.println("Porta 12345 aberta");

		while (!encerrar) {
			Socket cliente = servidor.accept();
			System.out.println("Nova conexão com o cliente "
					+ cliente.getInetAddress().getHostAddress());

			PrintStream ps = new PrintStream(cliente.getOutputStream());
			this.clientes.add(ps);

			TrataCliente tc = new TrataCliente(cliente.getInputStream(), this);
			new Thread(tc).start();
		}

	}

	public void distribuiMensagem(String msg) {
		for (PrintStream cliente : this.clientes) {
			cliente.println(msg);
		}
	}

}

Cliente.java

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Cliente {

	private String host;
	private int porta;

	public static void main(String[] args) throws UnknownHostException,
			IOException {
		new Cliente("127.0.0.1", 12345).executa();
	}

	public Cliente(String host, int porta) {
		this.host = host;
		this.porta = porta;
	}

	public void executa() throws UnknownHostException, IOException {
		Socket cliente = new Socket(this.host, this.porta);
		System.out.println("O cliente se conectou ao servidor!");

		Recebedor r = new Recebedor(cliente.getInputStream());
		new Thread(r).start();
		
		Scanner teclado = new Scanner(System.in);
		PrintStream saida = new PrintStream(cliente.getOutputStream());

		while (teclado.hasNextLine()) {
			saida.println(teclado.nextLine());
		}

		saida.close();
		teclado.close();
		cliente.close();
	}

}

Recebedor.java

import java.io.InputStream;
import java.util.Scanner;

public class Recebedor implements Runnable {

	private InputStream servidor;

	public Recebedor(InputStream servidor) {
		this.servidor = servidor;
	}

	@Override
	public void run() {
		Scanner s = new Scanner(this.servidor);
		while (s.hasNextLine()) {
			System.out.println(s.nextLine());
		}

	}

}

TrataCliente.java

import java.io.InputStream;
import java.util.Scanner;

public class TrataCliente implements Runnable{

	private InputStream cliente;
	private Servidor servidor;

	public TrataCliente(InputStream cliente, Servidor servidor) {
		this.cliente = cliente;
		this.servidor = servidor;
	}

	@Override
	public void run() {
		Scanner s = new Scanner(this.cliente);
		while(s.hasNextLine()){
			servidor.distribuiMensagem(s.nextLine());
		}
		
	}

}

agora manipulador de arquivo excel so leitura
classe1.java

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class classe1 {

    public static void main(String[] args) 
    throws BiffException, IOException 
    {
        /**
        * Carrega a planilha
        */
        Workbook workbook = Workbook.getWorkbook(new File("exemplo.xls"));
        /**
        * Aqui é feito o controle de qual aba do xls 
        * será realiza a leitura dos dados
        */
        Sheet sheet = workbook.getSheet(0);

        /**
        * Numero de linhas com dados do xls
        */
        int linhas = sheet.getRows();
        int colunas = sheet.getColumns();
		for (int j = 0; j < linhas; j++  ){
        for(int i = 0; i < colunas; i++  )
        {
            Cell celula = sheet.getCell(i, j);

            System.out.println("Conteúdo da célula na linha " + j + ", coluna "+ i +": " + celula.getContents());
            
        }}
    }
}
M

Cara, o seguinte código faz a leitura de um arquivo remotamente:

URL url = new URL("http://ipDoPc/diretorio/arquivo"); URLConnection pcRemoto = url.openConnection(); pcRemoto.setConnectTimeout(7000);//Timeout de 7 segundos; BufferedReader in = new BufferedReader(new InputStreamReader(pcRemoto.getInputStream(), "ISO-8859-1")); //Coloque no ultimo parâmetro o charset do arquivo.
Use isso para ler o arquivo.
Você pode ir lendo o arquivo e escrever o conteúdo em um arquivo temporário (que está no seu PC).
Localmente você verifica o arquivo e caso necessário, você pode seobrescrever o arquivo que está na máquina remota.
O objeto URL possui um métod getFile(), que retorna o arquivo que está naquele endereço. Use-o para pegar o arquivo a ser seobrescrito.
Abs.

R

tentei fazer isso matheus, mas está dando erro na linha 4

M

Ajudaria muito se você colocasse a mensagem do erro.

R
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class a {
	public static void main(String[] args) {

		URL url;
		URLConnection pcRemoto;
		try {
			url = new URL(
					"http://ip/caminho/teste.xlsx");
			try {
				pcRemoto = url.openConnection();
				url.getFile();
				pcRemoto.setConnectTimeout(7000);// Timeout de 7 segundos;
				BufferedReader incoming = new BufferedReader(
						new InputStreamReader(pcRemoto.getInputStream(),
								"ISO-8859-1"));

			} catch (IOException e) {
				e.printStackTrace();
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
		}

	}
}
java.net.SocketTimeoutException: connect timed out
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.Socket.connect(Socket.java:519)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:152)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
	at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
	at sun.net.www.http.HttpClient.New(HttpClient.java:306)
	at sun.net.www.http.HttpClient.New(HttpClient.java:323)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:788)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:729)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:654)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977)
	at a.main(a.java:21)
esse erro que aparece....
M
Cara, esqueci de um detalhe, depois da linha 19, você tem que chamar o método connect:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class a {
	public static void main(String[] args) {

		URL url;
		URLConnection pcRemoto;
		try {
			url = new URL(
					"http://ip/caminho/teste.xlsx");
			try {
				pcRemoto = url.openConnection();
				url.getFile();
				pcRemoto.setConnectTimeout(7000);// Timeout de 7 segundos;
                                pcRemoto.connect();// Chamada que havia sido omitida
				BufferedReader incoming = new BufferedReader(
						new InputStreamReader(pcRemoto.getInputStream(),
								"ISO-8859-1"));

			} catch (IOException e) {
				e.printStackTrace();
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
		}

	}
}

Desculpe pela omissão. :oops:

R

matheus ainda ta com erro…

pcRemoto.connect();// Chamada que havia sido omitida
				BufferedReader incoming = new BufferedReader(
						new InputStreamReader(pcRemoto.getInputStream()));
java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at sun.net.NetworkClient.doConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at a.main(a.java:20)

talvez seja o caminho que estou colocando errado… como você colocaria se o arquivo estivesse no C:\Users\Fulano\Desktop\teste.xlsx

M

MAs ai é que tá. Esse código que eu te passei é pra acessar o arquivo que está em outro pc. Tu tem que colocar o IP da máquina onde o arquivo está junto com o caminho do arquivo:

URL url = new URL("//192.168.1.1/diretorio/arquivo");

Eu coloquei esse ip de exemplo. Isso serve pra você acessar um arquivo em um computador em uma rede. Note que o arquivo deve está em uma pasta compartilhada.

R

matheus fiz tudo o que você me disse e continua o mesmo erro, to achando que é melhor fazer como um chat que ai consigo uma conexão com o pc em questão, e apartir dai tenho como botar estrutura de comando pra achar o arquivo e manipulalo(eu acho que isso é possivél)

M

Cara, tu tá colocando o IP errado. Essa exceção diz que a aplicação não tá encontrando o servidor. Vai lá na máquina que tu tá querendo se conectar e roda o seguinte código:

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
	public static void main(String[] args) throws IOException {
		InetAddress ia = null;
		 try {
		            ia = InetAddress.getLocalHost();
		        } catch (UnknownHostException ex) {
		            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
		        }
		        String ip = ia.getHostAddress();
		        System.out.print(ip);

	}
}

Isso retorna o IP da máquina na rede. O teu problema é unicamente de IP. Tu tem que descobrir o IP correto da outra máquina.

M

Me tira uma curiosidade. Essa máquina que você está querendo acessar está na mesma rede que a máquina que está rodando a aplicação?

R

sim, é maquina la do trabalho e todas estão em rede…

M

Cara,
–> Rode na máquina que você quer ser conectar o código que eu postei para encontrar o IP;
–> Coloque o arquivo a ser manipulado em uma pasta compartilhada (no pc que você quer se conectar);
–> Passe o IP que você achou para o construtor do objeto URL mais o caminho da pasta compartilhada:
URL url = new URL("//ip/pastaCompartilhada/Arquivo");
Foi dessa forma que você procedeu?

R

o do meu colega eu testei para meu pc e deu esse erro

java.io.FileNotFoundException: http://ip/Publico/teste.xls
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at teste.a.main(a.java:23)



package teste;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class a {
	public static void main(String[] args) {

		URL url;
		URLConnection pcRemoto;
		try {
			url = new URL("http://ip/Publico/teste.xls");
			try {
				pcRemoto = url.openConnection();
				url.getFile();
				pcRemoto.setConnectTimeout(7000);// Timeout de 7 segundos;
				pcRemoto.connect();// Chamada que havia sido omitida
				BufferedReader incoming = new BufferedReader(
						new InputStreamReader(pcRemoto.getInputStream()));

			} catch (IOException e) {
				e.printStackTrace();
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
		}

	}
}

do meu pra ele deu esse erro

java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at sun.net.NetworkClient.doConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at a.main(a.java:19)
M

RyuSayajin:
o do meu colega eu testei para meu pc e deu esse erro

java.io.FileNotFoundException: http://ip/Publico/teste.xls
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at teste.a.main(a.java:23)


O programa não está encontrando o arquivo nesse computador.

do meu pra ele deu esse erro

RyuSayajin:

java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at a.main(a.java:19)


Aqui ele diz que não tá se conectando ao pc remoto porque não tá achando o IP.
Você tem certeza que está usando o ip correto?
Vamos chamar a máquina com a qual você está querendo se conectar de servidor.
A sua máquina é o cliente.
Você deve rodar a aplicação no computador cliente e ela tem que chamar o IP do servidor.
Você está usando o IP correto?
A planilha se encontra em uma pasta compartilhada?

R

sim a todos as perguntas

M

Cara, no lugar de URL, usa URI, com ftp:

URI uri = new URI("ftp://ip/diretorio/arquivo"); File file = new File(uri); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

R

continua com erro

Exception in thread "main" java.lang.IllegalArgumentException: URI scheme is not "file"
	at java.io.File.<init>(Unknown Source)
	at a.main(a.java:42)
M

Cara, vamos tentar uma abordagem diferente.
Vamos usar sockets
Tu cria uma aplicação servidora simples usando ServerSocket e uma aplicação cliente usando Sockets. O problema dev ser alguma frescura de permissão do windows (faz até sentido, já pemsou se qualquer um pudesse criar um programa pra pegar um arquivo qualquer de seu pc…).
Você vai ter que fazer duas aplicações, uma servidora, que vai ficar na máquina que tu quer pegar o arquivo, e uma cliente, que vai ficar na máquina que vai receber o arquivo e manipulá-lo.
Entendeu?

R

verdade, e com sockets eu consegui uma conexão com o pc do meu colega só não sei fazer é fazer a aplicação dele me mandar o arquivo para minipular na minha aplicação

M

Cara, achei isso aqui: http://www.rgagnon.com/javadetails/java-0542.html.
Com umas pequenas modificações acho que você resolve seu problema.
Abs.

R

testei no meu pc e funcionou, daqui a pouco vou testar entre pcs pra ver se vai e se tudo der certo vou postar todo codigo aqui mudar o titulo para “[RESOLVIDO]Problema conexão, transferencia e manipulação de arquivo” para pesquisa posteriores XD

M

Ainda bem que minha ajuda serviu pra alguma coisa. Tava ficando contragido já, não tava dando nenhuma bola dentro :smiley:
Mas quando terminar posta mesmo a solução, para os nossos colegas que virão a ter a mesma dúvida.
[]'s

R

funcionou tudo perfeito, mas eu queria devolver o arquivo para o local de origem…
eu não entendi como que ele faz para transferir…
FileServer.java

import java.net.*;
import java.io.*;

public class FileServer {
  public static void main (String [] args ) throws IOException {
    // create socket
    ServerSocket servsock = new ServerSocket(13267);
    while (true) {
      System.out.println("Waiting...");

      Socket sock = servsock.accept();
      System.out.println("Accepted connection : " + sock);

      // sendfile
      File myFile = new File ("C:/Publico/teste.xls");
      byte [] mybytearray  = new byte [(int)myFile.length()];
      FileInputStream fis = new FileInputStream(myFile);
      BufferedInputStream bis = new BufferedInputStream(fis);
      bis.read(mybytearray,0,mybytearray.length);
      OutputStream os = sock.getOutputStream();
      System.out.println("Sending...");
      os.write(mybytearray,0,mybytearray.length);
      os.flush();
      sock.close();
      }
    }
}

FileClient.java

import java.net.*;
import java.io.*;

public class FileClient{
  public static void main (String [] args ) throws IOException {
    int filesize=6022386; // filesize temporary hardcoded

    long start = System.currentTimeMillis();
    int bytesRead;
    int current = 0;
    // localhost for testing
    Socket sock = new Socket("127.0.0.1",13267);
    System.out.println("Connecting...");

    // receive file
    byte [] mybytearray  = new byte [filesize];
    InputStream is = sock.getInputStream();
    FileOutputStream fos = new FileOutputStream("exemplo.xls");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    bytesRead = is.read(mybytearray,0,mybytearray.length);
    current = bytesRead;

    // thanks to A. Cádiz for the bug fix
    do {
       bytesRead =
          is.read(mybytearray, current, (mybytearray.length-current));
       if(bytesRead >= 0) current += bytesRead;
    } while(bytesRead > -1);

    bos.write(mybytearray, 0 , current);
    bos.flush();
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    bos.close();
    sock.close();
  }
}
M

Essa aplicação é unidericional. O servidor manda o arquivo para o cliente e o cliente armazena o arquivo localmente. É só você fazer que tanto o servidor como o cliente possam enviar e receber arquivos. O servidor possui um algoritmo para enviar arquivos e o cliente possui um algoritmo para receber arquivos.

Dei uma comentada no código que envia arquivos para ver se fica mais claro:

Socket socket = new Socket("127.0.0.1", 13267);//cria uma conexão com o servidor File file = new File("exemplo.xls"); FileInpuStream fiStream = new fileInputStream(file);//cria uma Stream para ler o arquivo BufferedInputStream bufferedReadrer = new BufferedInputStream(fiStream);//Cria um buffer para armazenamento temporário dos bytes lidos do arquivo byte[] bufferBytes = new bytes[(int)file.length()]; //Aloca um buffer de bytes do tamanho do arquivo OutputStream out = socket.getOutputStream();//Pega o OutputStream do socket. O OutputStream serve para enviar bytes para o socket bufferedReader.read(bufferBytes, 0, bufferBytes.length());// Lê o arquivo e o armazena no buffer de bytes out.write(bufferBytes, 0, bufferBytes.length());//Escreve o conteúdo do buffer de bytes no OutputStream do socket. out.flush();//Esvazia o OutputStream

R

oi matheus, obrigado por tudo…
apareceu uma duvida como posso separar por metodos e enviar um comando para o servidor para receber o arquivo?

M

Cara, você sabe mexer com Threads? Eu acho interessante que você crie duas Thread da seguinte forma:
–> Uma envia o arquivo através de sockets para a aplicação cliente
–> Outra recebe o arquivo de volta do cliente

R

Yo, consegui fazer uma aplicação com tudo até agora, mas não consigo mandar de volta pro servidor, só consigo receber dele…
pode me ajudar nesta questão que está me tirando de minha paz interior. :x

package servico;

import java.net.*;
import java.io.*;

public class FileServer {

	public void sendFile() throws IOException {
		ServerSocket servsock = new ServerSocket(13267);
		boolean bool = true;
		while (bool) {
			System.out.println("Waiting...");

			Socket sock = servsock.accept();
			System.out.println("Accepted connection : " + sock);

			File myFile = new File("C:/Publico/teste.xls");
			byte[] mybytearray = new byte[(int) myFile.length()];
			FileInputStream fis = new FileInputStream(myFile);
			BufferedInputStream bis = new BufferedInputStream(fis);
			bis.read(mybytearray, 0, mybytearray.length);
			OutputStream os = sock.getOutputStream();
			System.out.println("Sending...");
			os.write(mybytearray, 0, mybytearray.length);
			os.flush();
			sock.close();

		}
	}
}
package servico;
import java.net.*;
import java.io.*;

public class FileClient{
  public void receberFile() throws IOException{
	  int filesize=6022386; // filesize temporary hardcoded

	    long start = System.currentTimeMillis();
	    int bytesRead;
	    int current = 0;
	    // localhost for testing
	    Socket sock = new Socket("127.0.0.1",13267);
	    System.out.println("Connecting...");

	    // receive file
	    byte [] mybytearray  = new byte [filesize];
	    InputStream is = sock.getInputStream();
	    FileOutputStream fos = new FileOutputStream("exemplo.xls");
	    BufferedOutputStream bos = new BufferedOutputStream(fos);
	    bytesRead = is.read(mybytearray,0,mybytearray.length);
	    current = bytesRead;

	    
	    do {
	       bytesRead =
	          is.read(mybytearray, current, (mybytearray.length-current));
	       if(bytesRead >= 0) current += bytesRead;
	    } while(bytesRead > -1);

	    bos.write(mybytearray, 0 , current);
	    bos.flush();
	    long end = System.currentTimeMillis();
	    System.out.println(end-start);
	    bos.close();
	    sock.close();
  }
}
package teste;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import servico.*;

import javax.swing.JButton;
import javax.swing.JFrame;


public class MeuNote extends JFrame implements ActionListener {

	
	private JButton botao1 = new JButton("Receber arquivo");

	public MeuNote() {
		// Define o título da janela
		super("Meu Notepad");
		this.montaJanela();
	}

	private void montaJanela() {
		botao1.addActionListener(this);
		this.getContentPane().add(botao1, BorderLayout.NORTH);
		setSize(640, 480);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	public void actionPerformed(ActionEvent event) {

		try {
			new FileClient().receberFile();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		// Cria objeto:
		new MeuNote();
		try {
			new FileServer().sendFile();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
Criado 15 de julho de 2011
Ultima resposta 2 de ago. de 2011
Respostas 40
Participantes 4