txt texto por modificar manejo linea leer escribir ejemplo como archivos archivo abrir java arraylist text-files inputstream outputstream

texto - modificar archivos txt en java



Java: ¿Cómo puedo escribir mi ArrayList en un archivo y leer(cargar) ese archivo en el ArrayList original? (5)

Como ejercicio, sugeriría hacer lo siguiente:

public void save(String fileName) throws FileNotFoundException { PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); for (Club club : clubs) pw.println(club.getName()); pw.close(); }

Esto escribirá el nombre de cada club en una nueva línea en su archivo.

Soccer Chess Football Volleyball ...

Te dejo la carga a ti. Sugerencia : usted escribió una línea a la vez, luego puede leer una línea a la vez.

Cada clase en Java extiende la clase Object . Como tal, puedes anular sus métodos. En este caso, debería interesarle el método toString() . En su clase Club , puede anularlo para imprimir algún mensaje sobre la clase en el formato que desee.

public String toString() { return "Club:" + name; }

A continuación, puede cambiar el código anterior a:

public void save(String fileName) throws FileNotFoundException { PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); for (Club club : clubs) pw.println(club); // call toString() on club, like club.toString() pw.close(); }

Estoy escribiendo un programa en Java que muestra una variedad de clubes después de la escuela (por ejemplo, Fútbol, ​​Hockey, ingresados ​​por el usuario). Los clubes se agregan a la siguiente ArrayList :

private ArrayList<Club> clubs = new ArrayList<Club>();

Por el siguiente método:

public void addClub(String clubName) { Club club = findClub(clubName); if (club == null) clubs.add(new Club(clubName)); }

''Club'' es una clase con un constructor - nombre:

public class Club { private String name; public Club(String name) { this.name = name; } //There are more methods in my program but don''t affect my query.. }

Mi programa está funcionando; me permite agregar un nuevo objeto de club en mi lista de elementos, puedo ver la lista de elementos y puedo eliminar lo que quiera, etc.

Sin embargo, ahora quiero guardar esa arrayList (clubes) en un archivo, y luego quiero poder cargar el archivo más tarde y la misma lista de arrays está ahí nuevamente.

Tengo dos métodos para esto (ver más abajo), y he estado tratando de que funcione, pero no he tenido ninguna suerte, cualquier ayuda o consejo sería apreciado.

Guardar método (fileName es elegido por el usuario)

public void save(String fileName) throws FileNotFoundException { String tmp = clubs.toString(); PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); pw.write(tmp); pw.close(); }

Método de carga (el código actual no se ejecuta. ¿El archivo es una cadena pero debe ser Club?

public void load(String fileName) throws FileNotFoundException { FileInputStream fileIn = new FileInputStream(fileName); Scanner scan = new Scanner(fileIn); String loadedClubs = scan.next(); clubs.add(loadedClubs); }

También estoy usando una GUI para ejecutar la aplicación y, en este momento, puedo hacer clic en el botón Guardar que me permite escribir un nombre y una ubicación y guardarlos. El archivo aparece y se puede abrir en el Bloc de notas pero se muestra como algo como Club @ c5d8jdj (para cada Club en mi lista)


Debe utilizar el mecanismo de serialización incorporado de Java. Para usarlo, necesitas hacer lo siguiente:

  1. Declare la clase Club como implementable Serializable :

    public class Club implements Serializable { ... }

    Esto le dice a la JVM que la clase puede ser serializada a un flujo. No es necesario implementar ningún método, ya que esta es una interfaz de marcador.

  2. Para escribir su lista en un archivo haga lo siguiente:

    FileOutputStream fos = new FileOutputStream("t.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(clubs); oos.close();

  3. Para leer la lista de un archivo, haga lo siguiente:

    FileInputStream fis = new FileInputStream("t.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); List<Club> clubs = (List<Club>) ois.readObject(); ois.close();


En Java 8 puedes usar el método Files.write() con dos argumentos: Path y List<String> , algo como esto:

List<String> clubNames = clubs.stream() .map(Club::getName) .collect(Collectors.toList()) try { Files.write(Paths.get(fileName), clubNames); } catch (IOException e) { log.error("Unable to write out names", e); }


Esto podría funcionar para usted

public void save(String fileName) throws FileNotFoundException { FileOutputStream fout= new FileOutputStream (fileName); ObjectOutputStream oos = new ObjectOutputStream(fout); oos.writeObject(clubs); fout.close(); }

Para volver a leer puedes tener

public void read(String fileName) throws FileNotFoundException { FileInputStream fin= new FileInputStream (fileName); ObjectInputStream ois = new ObjectInputStream(fin); clubs= (ArrayList<Clubs>)ois.readObject(); fin.close(); }


ObjectOutputStream.writeObject(clubs) ObjectInputStream.readObject();

Además, la lógica de ''agregar'' es lógicamente equivalente a usar un Conjunto en lugar de una Lista. Las listas pueden tener duplicados y los conjuntos no pueden. Deberías considerar usar un set. Después de todo, ¿puedes realmente tener 2 clubes de ajedrez en la misma escuela?