elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayudaaaaaa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayudaaaaaa  (Leído 2,294 veces)
supersergio88

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Ayudaaaaaa
« en: 27 Mayo 2011, 09:57 am »

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:
 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:
Código
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.Socket;
  6.  
  7.  
  8. public class Cliente {
  9.   private static Socket socket;
  10.   public static void main(String[] args) throws IOException, ClassNotFoundException {
  11.        if(args.length != 2){
  12.            System.out.println("Debe especificar el host y el puerto del servidor");
  13.            System.exit(-1);
  14.        }
  15.        String hostServidor = args[0];
  16.        int puertoServidor = Integer.parseInt(args[1]);
  17.  
  18.        try{
  19.            socket = new Socket(hostServidor, puertoServidor);
  20.            System.out.println("El cliente se ha conectado con exito al servidor " + hostServidor + ":" + puertoServidor);
  21.        }catch(IOException e){
  22.            e.printStackTrace();
  23.        }
  24.  
  25.   }
  26.  
  27.   //el inputstreamreader coge un chorro de bytes y lo transforma a characteres
  28.          InputStreamReader isr = new InputStreamReader(System.in);
  29.   //el bufferedReder pasa de los characteres a lineas,tiene metodos readline() que lee lineas por ejemplo
  30.           BufferedReader in = new BufferedReader(isr);
  31.   // lo mismo es que si hiciera: BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  32.  
  33.     public void menuPrincipal(Socket sock) throws IOException, ClassNotFoundException{
  34.              boolean repetir;
  35.                char op = 0;
  36.                 repetir=true;
  37.                while(repetir){
  38.   //si quisiera (pero es ilogico ya que el metodo que voy a llamar esta en la misma clase),
  39.   //me podria crear un objeto MenuPersona menuPersona = new MenuPersona(); fuera del metodo
  40.   //para que no me lo pise, y luego llamarlo en lugar de Menu(); llamar a MenuPersona.Menu()
  41.                     Menup();
  42.                    op = in.readLine().charAt(0);
  43.                    switch(op){
  44.         case '1' :
  45.               System.out.println("--Monstramos lista el directorio local del cliente--");
  46.  
  47.                        repetir=true;
  48.                     break;
  49.  
  50.         case '2':
  51.                 System.out.println("--Monstramos lista el directorio remoto del servidor--");
  52.                       VerFicheros vf = new VerFicheros();
  53.                       vf.VerFichero();
  54.                      repetir=true;
  55.                    break;
  56.  
  57.         case '3':
  58.              System.out.println("--envíamos un fichero especificado(del directorio local al remoto)--");
  59.                 EnviarFichero ef = new EnviarFichero();
  60.                 ef.EscribirFichero(sock);
  61.                 ef.EnvioFicherosAServidor(socket);
  62.  
  63.  
  64.                repetir=true;
  65.              break;
  66.  
  67.         case '4':
  68.              System.out.println("--recibe un fichero especificado(del riectorio remoto al local)--");
  69.  
  70.                repetir=true;
  71.              break;
  72.  
  73.  
  74.  
  75.  
  76.         case '5':
  77.               System.out.println("salir cerrando la conexión con el servidor y terminando el proceso cliente");
  78.                  repetir = false;
  79.               System.out.println("Adios");
  80.             return;
  81.                    }
  82.           }
  83.  
  84.              }
  85.  
  86.  
  87. private static void Menup() {
  88.   System.out.println("||================================== MENU PRINCIPAL ==================================||");
  89.   System.out.println("|| ---------------------- ¡¡¡¡Hola!!! Elige una opcion por favor ---------------------||");
  90.   System.out.println("|| ----------------------                                       --------------------- ||");
  91.   System.out.println("||  1.- ‘lc’: lista el directorio local del cliente                                   ||");
  92.   System.out.println("||  2.- ‘lr’: lista el directorio remoto del servidor                                 ||");
  93.   System.out.println("||  3.-‘s’: envía un fichero especificado(del directorio local al remoto)             ||");
  94.   System.out.println("||  4.-‘r’: recibe un fichero especificado(del riectorio remoto al local)             ||" );
  95.   System.out.println("||  5.-‘q’: salir cerrando la conexión con el servidor y terminando el proceso cliente||");
  96.   System.out.println("||====================================================================================||");
  97.   System.out.println("||====================================================================================||");  
  98.         }
  99.  
  100. }
  101.  

Clase Servidor:

Código
  1. import java.io.IOException;
  2. import java.net.ServerSocket;
  3. import java.net.Socket;
  4.  
  5. public class Servidor{
  6. private final static int puerto = 0;
  7.  
  8.  
  9. public  static void main(String[] args){
  10.    try{
  11.        ServerSocket serverSocket = new ServerSocket(puerto);
  12.        System.out.println("El Servidor se ata al puerto " + serverSocket.getLocalPort());
  13.        while(true){
  14.            Socket conn = serverSocket.accept();
  15.            Procesador p = new Procesador(conn);
  16.            p.start();
  17.        }
  18.  
  19.    } catch(IOException e){
  20.        e.printStackTrace();
  21.    }
  22. }
  23.  
  24. }

Clase Procesador(para los hilos):

Código
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.Socket;
  6. import java.util.ArrayList;
  7.  
  8. public class Procesador extends Thread{
  9.  
  10.    private static Socket conn;
  11.  
  12.    public Procesador(Socket conn){
  13.        this.conn = conn;
  14.    }
  15.  
  16.    public synchronized void run(){
  17.           System.out.println("La direccion IP del cliente es: " + conn.getLocalAddress() + " y su puerto es " + conn.getPort());
  18.  
  19.            Cliente cliente = new Cliente();
  20.            try {
  21.               cliente.menuPrincipal(conn);
  22.            } catch (IOException e) {
  23.               // TODO Auto-generated catch block
  24.               e.printStackTrace();
  25.            } catch (ClassNotFoundException e) {
  26.               // TODO Auto-generated catch block
  27.               e.printStackTrace();
  28.            }
  29.  
  30. }
  31. }


Clase VerFicheros(para ver listado de ficheros):


Código
  1. import java.io.File;
  2.  
  3. public class VerFicheros {
  4.  
  5.   //
  6.   public void VerFichero() {
  7.  
  8. /**Lo primero que haremos será obtener una referencia al directorio que queremos listar.
  9. *Utilizaremos, en este caso, la clase File para almacenar la referencia.*/
  10.      File dir = new File("c:\\");
  11.  
  12. /**Uno de los métodos de la clase File es .list().
  13.  * Mediante este método recuperaremos los ficheros que componen el directorio especificado.
  14.  *  Lo que nos devuelve es un array de cadenas.*/        
  15.      String[] ficheros = dir.list();
  16.  
  17.  
  18.      if (ficheros == null)
  19.         System.out.println("No hay ficheros en el directorio especificado");
  20.      else {
  21.         for (int x=0;x<ficheros.length;x++){
  22.            System.out.println(ficheros);
  23.  
  24.         }
  25.      }
  26.  
  27.   }
  28.  
  29. }

Clase EnviarFicheros(la uso para enviar):

Código
  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.PrintStream;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.util.Scanner;
  9.  
  10.  
  11. public class EnviarFichero {
  12.   public void EnvioFicherosAServidor(Socket sock){
  13.  
  14.       try{
  15.          Scanner s=new Scanner(System.in);
  16.          System.out.println("Ingrese el path del archivo a enviar: " );
  17.          String path=s.nextLine();
  18.       PrintStream envio=new PrintStream(sock.getOutputStream());
  19.       //String path = "C:\\hola.txt";
  20.       System.out.println(path);
  21.       FileInputStream origen=new FileInputStream(path);
  22.       byte[] buffer = new byte[1024];
  23.       int len;
  24.       while((len=origen.read(buffer))>0){
  25.       envio.write(buffer,0,len);
  26.       }
  27.       }catch(IOException e){
  28.       e.printStackTrace();
  29.       }
  30.  
  31. }
  32.  
  33.   public void EscribirFichero(Socket socket) throws IOException{
  34.      try{
  35.         Scanner s=new Scanner(System.in);
  36.         System.out.println("Ingrese el path donde desea escribir el archivo: " );
  37.         String path=s.nextLine();
  38.         InputStream llegada = socket.getInputStream();
  39.         //String path = "C:\\Java";
  40.          System.out.println(path);
  41.         FileOutputStream destino=new FileOutputStream(path);
  42.         byte[] buffer = new byte[1024];
  43.         int len;
  44.         while((len=llegada.read(buffer))>0){
  45.         destino.write(buffer,0,len);
  46.         }
  47.         }catch(IOException e){
  48.            e.printStackTrace();
  49.            }
  50.   }
  51.   }
  52.  


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


« Última modificación: 10 Junio 2011, 16:10 pm por Leyer » En línea

barbieturico

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Ayudaaaaaa
« Respuesta #1 en: 10 Junio 2011, 02:37 am »

En realidad no probé el código, pero por el path que pones supongo que estás programando en Windows, si es así, la forma que tienes de poner las "barras" (\\) es correcta. Es decir path="C:\\fichero.txt"
¿Cuando descomentas las líneas en las que pones el path a pelo tampoco te funciona?

Por el error que te tira parece que estuvieras intentando seleccionar un directorio en lugar de un fichero en alguna parte del código. Para mí que esa traza que tenías del path es lo que más te puede ayudar.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDAAAAAA...!
Software
Rico 2 1,984 Último mensaje 22 Marzo 2003, 03:33 am
por ^^cAu^^
ayudaaaaaa en C plssssssss!!!!!!
Programación C/C++
alessinf 2 1,894 Último mensaje 30 Noviembre 2011, 17:34 pm
por alessinf
Programa c++, ayudaaaaaa
Programación C/C++
Soulmaquine 1 1,650 Último mensaje 16 Marzo 2015, 22:15 pm
por NOIS
Ayudaaaaaa
Hardware
Astar21 2 2,252 Último mensaje 28 Diciembre 2015, 23:59 pm
por Astar21
Ayudaaaaaa!
Programación C/C++
9pumba9 3 1,759 Último mensaje 20 Julio 2016, 15:57 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines