Foros del Web » Programación para mayores de 30 ;) » Java »

Conectar a unidad de red para operar con archivos

Estas en el tema de Conectar a unidad de red para operar con archivos en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 15/05/2007, 09:19
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
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
  #2 (permalink)  
Antiguo 17/05/2007, 04:58
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Re: Conectar a unidad de red para operar con archivos

Cita:
Iniciado por carota Ver Mensaje
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.
  #3 (permalink)  
Antiguo 17/05/2007, 07:47
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
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");
  #4 (permalink)  
Antiguo 17/05/2007, 09:50
 
Fecha de Ingreso: diciembre-2005
Ubicación: Madrid, España
Mensajes: 154
Antigüedad: 18 años, 4 meses
Puntos: 2
De acuerdo 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
  #5 (permalink)  
Antiguo 17/05/2007, 10:30
 
Fecha de Ingreso: abril-2007
Mensajes: 31
Antigüedad: 17 años
Puntos: 0
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.
  #6 (permalink)  
Antiguo 18/05/2007, 07:12
 
Fecha de Ingreso: diciembre-2005
Ubicación: Madrid, España
Mensajes: 154
Antigüedad: 18 años, 4 meses
Puntos: 2
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




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