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.
Baixe o arquivo via rede, (seja http, ssh…)
tipo to querendo manipular ele no local que ele está
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).
mmmmm entendi, poderia me ajudar, pelo menos com um exemplo se não for pedir muito…
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?
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?
quase la, é mais de como eu consigo pegar o arquivo se ele está em outro computador…
desculpe minha ignorância.
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
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.
sim, mas ai vou precisar de fazer isso também no pc que está o arquivo?
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
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.
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());
}}
}
}
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.
tentei fazer isso matheus, mas está dando erro na linha 4
Ajudaria muito se você colocasse a mensagem do erro.
[code]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();
}
}
}
[/code]
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…
Cara, esqueci de um detalhe, depois da linha 19, você tem que chamar o método connect:
[code]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();
}
}
}
[/code]
Desculpe pela omissão. :oops:
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