Ayuda Programa Java

Iniciado por supersergio88, 27 Mayo 2011, 09:56 AM

0 Miembros y 1 Visitante están viendo este tema.

supersergio88

Hola, estoy haciendo una aplicacion en java de intercambio de ficheros y con un menu, con varias clases.Pero me salta un error : (Is a directory)
Código (cpp) [Seleccionar]
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
at java.io.FileOutputStream.<init>(FileOutputStream.java:99)
no entiendo porque les dejo aqui mi codigo a ver si me pueden ayudar please

clase Cliente:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;


public class Cliente {
private static Socket socket;
public static void main(String[] args) throws IOException, ClassNotFoundException {
if(args.length != 2){
System.out.println("Debe especificar el host y el puerto del servidor");
System.exit(-1);
}
String hostServidor = args[0];
int puertoServidor = Integer.parseInt(args[1]);

try{
socket = new Socket(hostServidor, puertoServidor);
System.out.println("El cliente se ha conectado con exito al servidor " + hostServidor + ":" + puertoServidor);
}catch(IOException e){
e.printStackTrace();
}

}

//el inputstreamreader coge un chorro de bytes y lo transforma a characteres
InputStreamReader isr = new InputStreamReader(System.in);
//el bufferedReder pasa de los characteres a lineas,tiene metodos readline() que lee lineas por ejemplo
BufferedReader in = new BufferedReader(isr);
// lo mismo es que si hiciera: BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

public void menuPrincipal(Socket sock) throws IOException, ClassNotFoundException{
boolean repetir;
char op = 0;
repetir=true;
while(repetir){
//si quisiera (pero es ilogico ya que el metodo que voy a llamar esta en la misma clase),
//me podria crear un objeto MenuPersona menuPersona = new MenuPersona(); fuera del metodo
//para que no me lo pise, y luego llamarlo en lugar de Menu(); llamar a MenuPersona.Menu()
Menup();
op = in.readLine().charAt(0);
switch(op){
case '1' :
System.out.println("--Monstramos lista el directorio local del cliente--");

repetir=true;
break;

case '2':
System.out.println("--Monstramos lista el directorio remoto del servidor--");
VerFicheros vf = new VerFicheros();
vf.VerFichero();
repetir=true;
break;

case '3':
System.out.println("--envíamos un fichero especificado(del directorio local al remoto)--");
EnviarFichero ef = new EnviarFichero();
ef.EscribirFichero(sock);
ef.EnvioFicherosAServidor(socket);


repetir=true;
break;

case '4':
System.out.println("--recibe un fichero especificado(del riectorio remoto al local)--");

repetir=true;
break;




case '5':
System.out.println("salir cerrando la conexión con el servidor y terminando el proceso cliente");
repetir = false;
System.out.println("Adios");
return;
}
}

}


private static void Menup() {
System.out.println("||================================== MENU PRINCIPAL ==================================||");
System.out.println("|| ---------------------- ¡¡¡¡Hola!!! Elige una opcion por favor ---------------------||");
System.out.println("|| ---------------------- --------------------- ||");
System.out.println("|| 1.- 'lc': lista el directorio local del cliente ||");
System.out.println("|| 2.- 'lr': lista el directorio remoto del servidor ||");
System.out.println("|| 3.-'s': envía un fichero especificado(del directorio local al remoto) ||");
System.out.println("|| 4.-'r': recibe un fichero especificado(del riectorio remoto al local) ||" );
System.out.println("|| 5.-'q': salir cerrando la conexión con el servidor y terminando el proceso cliente||");
System.out.println("||====================================================================================||");
System.out.println("||====================================================================================||");
}

}


Clase Servidor:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor{
private final static int puerto = 0;


public static void main(String[] args){
try{
ServerSocket serverSocket = new ServerSocket(puerto);
System.out.println("El Servidor se ata al puerto " + serverSocket.getLocalPort());
while(true){
Socket conn = serverSocket.accept();
Procesador p = new Procesador(conn);
p.start();
}

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

}

Clase Procesador(para los hilos):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;

public class Procesador extends Thread{

private static Socket conn;

public Procesador(Socket conn){
this.conn = conn;
}

public synchronized void run(){
System.out.println("La direccion IP del cliente es: " + conn.getLocalAddress() + " y su puerto es " + conn.getPort());

Cliente cliente = new Cliente();
try {
cliente.menuPrincipal(conn);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


Clase VerFicheros(para ver listado de ficheros):



import java.io.File;

public class VerFicheros {

//
public void VerFichero() {

/**Lo primero que haremos será obtener una referencia al directorio que queremos listar.
*Utilizaremos, en este caso, la clase File para almacenar la referencia.*/
File dir = new File("c:\\");

/**Uno de los métodos de la clase File es .list().
* Mediante este método recuperaremos los ficheros que componen el directorio especificado.
* Lo que nos devuelve es un array de cadenas.*/
String[] ficheros = dir.list();


if (ficheros == null)
System.out.println("No hay ficheros en el directorio especificado");
else {
for (int x=0;x<ficheros.length;x++){
System.out.println(ficheros[x]);
}
}

}

}


Clase EnviarFicheros(la uso para enviar):

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


public class EnviarFichero {
public void EnvioFicherosAServidor(Socket sock){

try{
Scanner s=new Scanner(System.in);
System.out.println("Ingrese el path del archivo a enviar: " );
String path=s.nextLine();
PrintStream envio=new PrintStream(sock.getOutputStream());
//String path = "C:\\hola.txt";
System.out.println(path);
FileInputStream origen=new FileInputStream(path);
byte[] buffer = new byte[1024];
int len;
while((len=origen.read(buffer))>0){
envio.write(buffer,0,len);
}
}catch(IOException e){
e.printStackTrace();
}

}

public void EscribirFichero(Socket socket) throws IOException{
try{
Scanner s=new Scanner(System.in);
System.out.println("Ingrese el path donde desea escribir el archivo: " );
String path=s.nextLine();
InputStream llegada = socket.getInputStream();
//String path = "C:\\Java";
System.out.println(path);
FileOutputStream destino=new FileOutputStream(path);
byte[] buffer = new byte[1024];
int len;
while((len=llegada.read(buffer))>0){
destino.write(buffer,0,len);
}
}catch(IOException e){
e.printStackTrace();
}
}
}




Pongo entre \\ como pongo yo el path si esta mal como lo pongo corregirme porfavor, les agradezco que testen mi codigo y si le salta algun error de que meten mal el directorio al darle a la opcion de enviar, la opcion 3

kiriost

#1
La próxima utiliza la etiqueta [ code] o GeSHi para colocar código.

Según veo el error es que con la función para abrir ficheros estas abriendo una carpeta. No tengo mucho tiempo para darle una leída a tu Código. Cuando pueda la prueba y te digo :o
http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más

Littlehorse

Te lo muevo a Java.

No he leído el código pero depura el programa y verifica que contenido le estas pasando a FileOutputStream. Si estas con Eclipse, coloca un breakpoint en la linea del error y agrega un watch a la cadena que le pasas a FileOutputStream.

Es muy probable que sea lo que dice kiriost, de hecho el error lo deja claro, pero mas vale asegurarse haciéndose amigo del debug.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.