Código
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