Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Conectar a unidad de red para operar con archivos (http://www.forosdelweb.com/f45/conectar-unidad-red-para-operar-con-archivos-490108/)

carota 15/05/2007 09:19

Conectar a unidad de red para operar con archivos
 
Hola:
Me tengo que conectar mediante JAVA a una unidad de red que tiene usuario y password.

La idea es conectarme a \\10.66.21.10\dte y ver los archivos que hay copiar, eliminar agruparlos etc y desconectarme des esa unidad de red.

Estoy utilizando el método FILE, pero no se como poner el tema del pasword y usuario.

No es una base de datos , es solo a una carpeta que me comparten en otra red (yo estoy en la 10.35.9.0) me debo de conectar y operar.

Como lo hago ?

gracias.
Saludos

elAntonie 17/05/2007 04:58

Re: Conectar a unidad de red para operar con archivos
 
Cita:

Iniciado por carota (Mensaje 2005153)
Hola:
Me tengo que conectar mediante JAVA a una unidad de red que tiene usuario y password.

La idea es conectarme a \\10.66.21.10\dte y ver los archivos que hay copiar, eliminar agruparlos etc y desconectarme des esa unidad de red.

Estoy utilizando el método FILE, pero no se como poner el tema del pasword y usuario.

No es una base de datos , es solo a una carpeta que me comparten en otra red (yo estoy en la 10.35.9.0) me debo de conectar y operar.

Como lo hago ?

gracias.
Saludos

Pues no hay ningun metodo de File que reciba como parametros un login y un password, como habras comprobado.

Tendrias que crearte una unidad de red en la maquina donde vaya a ejecutarse tu aplicacion y conectarte a esa unidad de red.

Otra opcion podria ser mediante FTP.

Saludos.

carota 17/05/2007 07:47

Re: Conectar a unidad de red para operar con archivos
 
Encontre que el comando que necesito ejecutar es el siguiente :

net use //10.66.21.10/dte PASSWORD

Eso me abre la conexion ...

Estoy probando con RUNTIME, pero no me anda desde java.. .si anda si lo ejecuto desde DOS.

Runtime aplicacion = Runtime.getRuntime();
aplicacion.exec("cmd /c net use //10.66.21.10/dte password");

radian 17/05/2007 09:50

Re: Conectar a unidad de red para operar con archivos
 
JCIFS/SM es una librería pensada para lo que necesitas: intercambio de ficheros entre redes compartidas microsoft windows.

http://jcifs.samba.org/

Y como estoy generoso te copio incluso dos funciones que hice para copiar archivos desde una unidad de red, y a la misma unidad de red (ambas direcciones):

Código:

  public void copiarFicheroDesdeUnidad (SmbFile in, File out)
  {
    SmbFileInputStream fis = null;
    FileOutputStream fos = null;
   
    try
    {
      fis = new SmbFileInputStream(in);
      fos = new FileOutputStream(out);
      byte[] buf = new byte[1024];
     
      int i = 0;
      while ((i=fis.read(buf)) != -1)
      {
        fos.write(buf, 0, i);
      }
    }
    catch (Exception e) {}
    finally
    {
      try
      {
        fis.close();
        fos.close();
      }
      catch (Exception e) {};
    }
  }
 
  public void copiarFicheroAUnidad (File in, SmbFile out)
  {
    FileInputStream fis = null;
    SmbFileOutputStream fos = null;
   
    try
    {
      fis = new FileInputStream(in);
      fos = new SmbFileOutputStream(out);
      byte[] buf = new byte[1024];
     
      int i = 0;
      while ((i=fis.read(buf)) != -1)
      {
        fos.write(buf, 0, i);
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    finally
    {
      try
      {
        fis.close();
        fos.close();
      }
      catch (Exception e) {};
    }
  }

}


Con este pedazo favor que te acabo de hacer me merezco que me votes reputación ;)

saludos

carota 17/05/2007 10:30

Re: Conectar a unidad de red para operar con archivos
 
Radian: Muchas gracias... dime como voto y lo hago porque es interesante tu respuesta... sin embargo justamente por SAMBA me comparten la carpeta.

El tema es que yo no solo voy a copiar archivos, tengo que modificar los nombres de los archivos, actuar en base a fechas etc.

Por ese motivo es que necesito estar conectado a Esa carpeta.

Por afuera de java lo puedo hacer, ya que puedo crear hasta un .bat o lo que tu dices.

Yo quiero ver si con un programa JAVA puedo resolver el problema lo que me tranca es el tema del PASSWORD !!. porque si mediante windows abro la conexion con esa carpeta.. el programa me anda barbaro, realiza todo lo que tiene que hacer... pero donde no tenga establecida la conexion ... no anda nada porque no llega a ver la estructura de carpetas y archivos.

Gracias.

radian 18/05/2007 07:12

Re: Conectar a unidad de red para operar con archivos
 
carota,

Esta librería te permite trabajar con esa unidad remota de red como si fuera un archivo local de tu PC, por lo que puedes hacer todo eso que quieres y más. Lee más documentación en la página que te cité.

Te paso también una clase con la función de conexión que implementé yo:


Código:

package ...;
import jcifs.smb.*;
import java.util.*;
import java.io.*;

public class UnidadRed
{
  private String user;
  private String password;
  private String host;
  private String unidad; 
  private String ip;
 
  public UnidadRed()
  {

  }
 
  public void setIp (String ip)                { this.ip = ip;  }
  public void setUser (String user)            { this.user = user; }
  public void setPassword (String password)    { this.password = password; }
  public void setHost (String host)            { this.host = host; }
  public void setUnidad (String unidad)        { this.unidad = unidad; }
 
  public void conectar()
  {
    try
    {
      PropertyResourceBundle resb = (PropertyResourceBundle)
                      ResourceBundle.getBundle("properties.unidad");
      setHost(resb.getString("unidad.host"));
      setIp(resb.getString("unidad.ip"));
      setUser(resb.getString("unidad.user"));
      setPassword(resb.getString("unidad.password"));
      setUnidad(resb.getString("unidad.unidad"));
     
      jcifs.Config.setProperty(this.host,this.ip);
    }
    catch (Exception e) {}
  }
 
  public String apuntarPath ()
  {
    conectar();
    return "smb://" + this.user + ":" + this.password + "@" + this.host + "/" +
            this.unidad + "/";
  }
 
}

Puedes ve que tengo todos esos datos en un fichero aparte que se llama "unidad.properties"

Este es un ejemplo del uso de esta clase:


Código:

SmbFile archivo = null;

String fichero = ...

try
{
 PropertyResourceBundle resb = (PropertyResourceBundle)
                                        ResourceBundle.getBundle("properties.unidad");
 UnidadRed unidadRed = new UnidadRed();
 archivo = new SmbFile(unidadRed.apuntarPath() + fichero); 

.... aquí haz tus operaciones con ese archivo ...
// date cuenta que la llamada a unidadRed.apuntarPath() conecta con la unidad de red y apunta al path básico

}

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


Para votar reputación se pincha en la balanza que está arriba a la derecha de cualquier mensaje que haya enviado el usuario al que quieres votar.

Saludos y suerte


La zona horaria es GMT -6. Ahora son las 14:02.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.