Problema con archivos

Iniciado por Ruusa, 23 Octubre 2020, 01:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

Ruusa

Hola buenas tardes, estoy haciendo un programa en java con archivos, directorios, tengo que agregar el nombre de los archivos por teclado y validar que ese mismo nombre no exista en el directorio, para eso cree un array de archivos, donde guardo los nombres de los archivos y su correspondiente ubicacion.
El problema es que la validacion tira un resultado incorrecto cuando pongo dos archivos con el mismo nombre, no me tendria que dejar agregar el mismo nombre de archivo al array archi y sin embargo lo agrega igual,  si alguien me podria ayudar se lo agradeceria.

public class Archivo {

   String nombre;
   int longitud;
   String ubicacion;
   int bloqueInicial;
   int bloqueFinal;
   
   
   public void setNombre(String nombre) {
      this.nombre=nombre;
   }
   
   public void setLongitud(int l) {
      this.longitud=l;
   }
   
   public void setUbicacion(String ubicacion) {
      this.ubicacion=ubicacion;
   }
   
   public void setBloqueInicial(int bloque) {
      this.bloqueInicial=bloque;
   }
   
   public void setBloqueFinal(int bloque) {
      this.bloqueFinal=bloque;
   }
   
   public String getNombre() {
      return this.nombre;
   }
   
   public int getLongitud() {
   return this.longitud;
   }

    public String getUbicacion() {
    return this.ubicacion;
    }
   
    public int getBloqueInicial() {
       return this.bloqueInicial;
    }
   
    public int getBloqueFinal() {
       return this.bloqueFinal;
    }
-----------------------------------------------------------------------------------------

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Directorio {
  static File directorio;
  static File archivo;
  int bloqueS=0;
  static int iArchivo=0;

static ArrayList<Archivo> archi = new ArrayList<>();
private Scanner nombre;


public void crearDirectorio () {
   
     directorio = new File("directorio2");
   directorio.mkdir();
}


public boolean verificar (String nombre) {
boolean t=true;

   for (int i=0; i<archi.size();i++) {
      if (archi.get(i).getNombre()==nombre) {
         t=false;
         System.out.println("es igual");
      }
   }
   return t;
}


public void agregarArchivo () {   //agrega el archivo al directorio y al array
   boolean c;
       for (int i=0; i<3;i++) {
      System.out.println("Ingrese nombre de archivo");
      Scanner nom= new Scanner(System.in);
      String nombre= nom.nextLine();
      c=verificar(nombre);
      if (c!=false) {
       try {
      archivo = new File(directorio,nombre);
      archivo.createNewFile();
   
      Archivo aux = new Archivo();
     aux.setNombre(archivo.getName());
     aux.setUbicacion(archivo.getAbsolutePath());
     aux.setLongitud((int)archivo.length());
     archi.add(aux);
    
   } catch (IOException e) {
      e.printStackTrace();
   }
      
   } else
      System.out.println("El nombre con ese archivo ya existe");
   
   }
}

public static void mostrarArchivos() {
   System.out.println("                           FAT                             ");
   for (int i=0; i<archi.size(); i++) {
    System.out.println(" ");
   System.out.println("**********************************************************************");
   System.out.println("     Numero de bloque: "+i);
   //System.out.println("     Bloque sig: "+archi.get(i).bloqueSig);
   System.out.println("     Longitud: "+archi.get(i).longitud);
   System.out.println("     Nombre de archivo:   "+archi.get(i).getNombre());
   //System.out.println("     Estado bloque: "+archi.get(i).getEstado());
   System.out.println("     Ubicacion en disco: "+archi.get(i).getUbicacion());
    System.out.println("***********************************************************************");
   System.out.println(" ");
   

       
   }
   }

public static void main(String[] args) {
   Directorio d = new Directorio();
   d.crearDirectorio();
   d.agregarArchivo();
   d.mostrarArchivos();
    }
   
   
}
   

K-YreX

No puedes comparar instancias de la clase String (ni de ninguna clase) usando el operador ==. El operador == compara que las direcciones de memoria sean las mismas, es decir, que sea la misma instancias.

Para comparar el contenido y no la referencia tienes que utilizar el método equals().



Empieza a utilizar etiquetas de Código GeSHi para adjuntar tu código.
Para colocarlas tienes que seleccionar tu código y con él seleccionado, abrir el desplegable llamado Código GeSHi y elegir Java.
Código (java) [Seleccionar]

public class MyClass {
  //...
}
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

rub'n

#2
Cita de: K-YreX en 23 Octubre 2020, 01:59 AM
No puedes comparar instancias de la clase String (ni de ninguna clase) usando el operador ==. El operador == compara que las direcciones de memoria sean las mismas, es decir, que sea la misma instancias.

Para comparar el contenido y no la referencia tienes que utilizar el método equals().



Empieza a utilizar etiquetas de Código GeSHi para adjuntar tu código.
Para colocarlas tienes que seleccionar tu código y con él seleccionado, abrir el desplegable llamado Código GeSHi y elegir Java.
Código (java) [Seleccionar]

public class MyClass {
 //...
}


tal cual doc asi mismo.

Ponle un post-decremento en el else, por el archivo que estaria posiblemente repetido.

Código (java) [Seleccionar]

} else {
   i--;
   System.out.println("El nombre con ese archivo ya existe");
}


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen