Domanda

Sto usando BufferedReader e PrintWriter per passare attraverso ogni riga di un file di input, apportare una modifica ad alcune righe e produrre il risultato. Se una riga non viene modificata, viene stampata come nel file di output. Per qualche ragione, tuttavia, il processo termina prematuramente. Il codice è simile al seguente:

BufferedReader in = new BufferedReader(new FileReader("in.txt"));
FileOutputStream out = new FileOutputStream("out.txt");
PrintWriter p = new PrintWriter(out);
String line = in.readLine();

while(line!=null)
{
   if(line is special)
      do edits and p.println(edited_line);
   else
      p.println(line);

   line = in.readLine();
}

Tuttavia, per qualche strana ragione, questo processo termina prematuramente (in realtà stampa una mezza riga) verso la fine del mio file di input. Qualche ragione ovvia per questo? Il ciclo while è chiaramente terminato da un null. Ed è verso la fine del mio file txt 250k + line. Grazie!

È stato utile?

Soluzione

Dove svuoti / chiudi PrintWriter o FileOutputStream? Se il programma termina e ciò non viene fatto, non tutti i risultati verranno scritti.

È necessario out.close () (possibilmente anche un p.flush () ?) alla fine del processo per chiudere il flusso di output del file

Altri suggerimenti

Prova ad aggiungere un p.flush () dopo il ciclo.

PrintWriter non ha il autoflushing abilitato, quindi è probabile che l'ultimo bit del file non venga scaricato prima che il programma termini.

Aggiunta di a p.flush () dopo il ciclo while dovrebbe fare il trucco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top