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)
 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
			
			
			
				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
			
			
			
				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!