Archivo de escritura – PrintStream append

Intento agregar información en un archivo de texto, pero el archivo solo muestra el último elemento escrito.

Hay muchos Engineer , pero imprime en el archivo solo el último elemento que se lee.

Por ejemplo:

 Engineer e = new Engineer(firstName,surName,weeklySal); PrintStream writetoEngineer = new PrintStream(new File ("Engineer.txt")); //This is not append. Only print. Overwrites the file on each item. writetoEngineer.append(e.toString() + " " + e.calculateMontly(weeklySal)); 

No veo dónde estás cerrando el archivo. Yo tampoco te veo leyendo nada.

Supongo que desea agregar al archivo en lugar de sobrescribirlo cada vez. En ese caso, debe usar la opción de agregar de FileOutputStream ya que este no es el comportamiento predeterminado.

 PrintStream writetoEngineer = new PrintStream( new FileOutputStream("Engineer.txt", true)); 

Por cierto: e.toString() + " " es casi lo mismo que e + " " excepto que no arroja una excepción si e es nulo.

Dado que el fragmento de código de código dado no es un Ejemplo comstackble autónomo (es simple), puedo adivinar que PrintStream se crea dentro del ciclo, por cada iteración sobre la colección Engineer. Eso haría que el archivo se truncara como se indica en el constructor de PrintStream javadoc:

Parámetros:

archivo: el archivo que se utilizará como destino de esta secuencia de impresión. Si el archivo existe, entonces se truncará a tamaño cero; de lo contrario, se creará un nuevo archivo. La salida se escribirá en el archivo y se almacenará en el búfer.

prueba este código de ejemplo:

 import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; public class PrintEngineers { public static class Engineer { private final String firstName; private final String surName; private final int weeklySal; public Engineer(String firstName, String surName, int weeklySal) { super(); this.firstName = firstName; this.surName = surName; this.weeklySal = weeklySal; } public int calculateMonthly() { return weeklySal * 4; // approximately } @Override public String toString() { return firstName + " " + surName; } } /** * @param args * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException { Engineer e1 = new Engineer("first1", "sur1", 100); Engineer e2 = new Engineer("first2", "sur2", 200); Engineer e3 = new Engineer("first3", "sur3", 300); List engineers = new ArrayList<>(3); engineers.add(e1); engineers.add(e2); engineers.add(e3); // instanciate PrintStream here, before the loop starts PrintStream writetoEngineer = new PrintStream(new File("Engineer.txt")); for (Engineer engineer : engineers) { // new PrintStream(...) here truncates the file (see javadoc) //This is not append.Only print.Refresh file on each item writetoEngineer.append(engineer.toString()).append(' ') .append("" + engineer.calculateMonthly()).append('\n'); } } } 
    Intereting Posts