En un programa Java (Java 1.5), tengo un BufferedWriter que envuelve un FileWriter, y que llamo escritura() muchas veces ... El archivo resultante es bastante grande ...para eliminar un BufferedWriter
Entre las líneas de este archivo, algunas están incompletas ...
¿Debo llamar a flush cada vez que escribo algo (pero sospecho que sería ineficaz) o usar otro método de BufferedWriter o usar otra clase? ...?
(Como tengo un montón de líneas por escribir, quiero tener algo bastante eficiente.) ¿Cuál sería el momento ideal de "enjuague"? (Cuando llegue a la capacidad de la BufferedWriter) ...
Init:
try {
analysisOutput = new BufferedWriter(new FileWriter(
"analysisResults", true));
analysisOutput.newLine();
analysisOutput.write("Processing File " + fileName + "\n");
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
Escritura:
private void printAfterInfo(String toBeMoved,HashMap<String, Boolean> afterMap, Location location)
throws IOException {
if(afterMap != null) {
for (Map.Entry<String, Boolean> map : afterMap.entrySet()) {
if (toBeMoved == "Condition") {
if (1 <= DEBUG)
System.out.println("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1)
+ " After " + map.getKey() + " "
+ map.getValue() + "\n");
analysisOutput.write("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1)
+ " After " + map.getKey() + " " + map.getValue()
+ "\n");
} else {
if (1 <= DEBUG)
System.out.println("###" + toBeMoved + " " + location + " "
+ map.getKey() + " After "
+ map.getValue() + "\n");
if (conditionalDefs.size() > 0)
analysisOutput.write("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1) + " "
+ map.getKey() + " After " + map.getValue()
+ "\n");
else
analysisOutput.write("###" + toBeMoved + " " + location + " " + map.getKey() + " After " + map.getValue() + "\n");
}
}
}
acabo cuenta de que las líneas que sean incompletas son los que acaban de antes de "Procesar archivo" ... así ocurre cuando estoy cambiando de un archivo que analizo a otro ...
Cierre:
dispatch(unit);
try {
if (analysisOutput != null) {
printFileInfo();
analysisOutput.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
veces la información impresa por printFileInfo no aparece en el archivo de resultados ...
Si están incompletos, ¿tiene múltiples hilos escribiendo en él? IIRC a BufferedWriter NO es seguro para subprocesos, por lo que podría ser una explicación, pero NO tiene que "enjuagarse manualmente" para hacer más espacio, se encarga de eso. –
Si no está seguro de que su pregunta sea clara, quizás proporcione una muestra de código o una muestra de salida que aclare. –
En realidad es seguro para subprocesos (aunque los decoradores de Writer tienen problemas para acordar qué objeto bloquear). –