elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 01:28  


Tema destacado:


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

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Ayuda Programa Java
« en: 27 Mayo 2011, 09:56 »

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:
 
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


« Última modificación: 1 Junio 2011, 00:46 por Littlehorse » En línea
kiriost

Desconectado Desconectado

Mensajes: 57


www.godsys.com.ar Hacking y Programación


Ver Perfil WWW
Re: Ayuda Programa Java
« Respuesta #1 en: 28 Mayo 2011, 22:14 »

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


« Última modificación: 1 Junio 2011, 02:56 por Novlucker » En línea

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
All the world's a stage
Colaborador
***
Desconectado Desconectado

Mensajes: 2.710


Nie Dam Sie


Ver Perfil WWW
Re: Ayuda Programa Java
« Respuesta #2 en: 1 Junio 2011, 00:45 »

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!
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
NOVATA PIDE AYUDA en programa de java
Java
dvd1975 12 3,643 Último mensaje 14 Octubre 2008, 11:56
por dvd1975
Ayuda con programa de java...
Java
Dulcrash 7 1,211 Último mensaje 8 Noviembre 2008, 09:35
por juancho77
Ayuda con un programa en Java
Java
jpxc 1 1,119 Último mensaje 10 Marzo 2010, 06:34
por Leyer
AYUDA CON ESTE PROGRAMA JAVA¡¡¡¡¡
Ejercicios
DomInYK 3 2,206 Último mensaje 4 Agosto 2011, 01:57
por bjpenn
[Ayuda] Hacer un programa java que marque solo
Java
777Rubenix777 1 1,200 Último mensaje 4 Julio 2011, 01:44
por [Case]
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines