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.
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)
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.
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?
sim, é maquina la do trabalho e todas estão em rede…
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?
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)
[quote=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)
[/quote]
O programa não está encontrando o arquivo nesse computador.
do meu pra ele deu esse erro
[quote=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)
[/quote]
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?
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)));
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)
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?
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
Cara, achei isso aqui: http://www.rgagnon.com/javadetails/java-0542.html.
Com umas pequenas modificações acho que você resolve seu problema.
Abs.
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
Ainda bem que minha ajuda serviu pra alguma coisa. Tava ficando contragido já, não tava dando nenhuma bola dentro 
Mas quando terminar posta mesmo a solução, para os nossos colegas que virão a ter a mesma dúvida.
[]'s
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();
}
}
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
oi matheus, obrigado por tudo…
apareceu uma duvida como posso separar por metodos e enviar um comando para o servidor para receber o arquivo?
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