Salvar arquivo txt

Ola pessoal. Estou com um pequeno problema que não consigo entender. O algoritmo é um ordenador de números inteiros chamado Bubblesort. O problema surge na hora de salvar um novo arquivo com todos os números ordenados que estão dentro de um vetor, por alguma razão ao invés de gravar 10 mil números, ele grava apenas 5806. Tentei com arquivos com 50 mil e 100 mil e parece sempre faltar parte dos números no novo arquivo gerado.

obs: O arquivo de leitura está em anexo.


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;

public class BubbleSort {

    public static void main(String[] args) throws Exception {

        JFileChooser chooser = new JFileChooser();
        int returnVal = chooser.showOpenDialog(null);

        String n = "";
        String VetorDeString = "";

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File f = chooser.getSelectedFile();

            BufferedReader reader = new BufferedReader(new FileReader(f));

            while ((n = reader.readLine()) != null) {
                VetorDeString += n;
            }

            StringTokenizer st = new StringTokenizer(VetorDeString);
            int i = 0;
            int Total = st.countTokens();
            String[] vetor2 = new String[Total];

            while (st.hasMoreTokens()) {
                vetor2[i] = st.nextToken();
                i++;
            }

            int[] vetor = new int[Total];

            for (int k = 0; k < Total; k++) {
                vetor[k] = Integer.parseInt(vetor2[k]);
            }

            int aux, for1, for2;

            System.out.println("*******Ordenando*******\n");
            for (for1 = 0; for1 < i; for1++) {
                for (for2 = 0; for2 < i - 1; for2++) {
                    if (vetor[for2] > vetor[for2 + 1]) {
                        aux = vetor[for2];
                        vetor[for2] = vetor[for2 + 1];
                        vetor[for2 + 1] = aux;
                    }
                }
            }

            File arquivo = new File("C:\\DezMil.txt");
            PrintWriter printWriter = new PrintWriter(arquivo);

            int k, auxiliar = 0;
            for (k = 0; k < Total; k++) {
                //auxiliar = vetor[k];
                //printWriter.write(auxiliar + " ");
                printWriter.print(vetor[k] + " ");
            }
        }
    }
}

Agradeço a paciência.

printWriter.close();

ou

printWriter.flush();

logo abaixo do for.

lembre de fechar o recurso quando terminar

Dá para modernizar esse código também. Não se usa mais StringTokenizer desde o Java 5. Já criaram formas melhores de ler arquivos no Java 5 (Scanner) e depois novamente no Java 7 (Files).

Finalmente, não crie uma variável chamada “i” (que tipicamente só tem o escopo de um loop) com um escopo tão grande. É pedir para o código ficar confuso.

Um código mais moderno seria:

[code]import javax.swing.*;
import java.io.File;
import java.io.PrintWriter;
import java.nio.file.Files;

public class BubbleSort {

public static void main(String[] args) throws Exception {
    //Pede para o usuário escolher o arquivo
    JFileChooser chooser = new JFileChooser();
    int returnVal = chooser.showOpenDialog(null);
    if (returnVal != JFileChooser.APPROVE_OPTION) {
        return;
    }

    //Le o arquivo do disco
    String texto = new String(Files.readAllBytes(chooser.getSelectedFile().toPath()));
    //Separa o arquivo pelo caracter de espaço
    String[] vetor2 = texto.split(&quot; &quot;);
    //Converte o array para inteiros.
    int[] vetor = new int[vetor2.length];
    for (int k = 0; k &lt; vetor.length; k++) {
        vetor[k] = Integer.parseInt(vetor2[k]);
    }

    //Ordenação com bubble sort
    System.out.println(&quot;******* Ordenando *******\n&quot;);
    for (int i = 0; i &lt; vetor.length; i++) {
        for (int j = 0; j &lt; vetor.length - i - 1; j++) {
            if (vetor[j] &gt; vetor[j+1]) {
                int aux = vetor[j];
                vetor[j] = vetor[j+1];
                vetor[j+1] = aux;
            }
        }
    }

    //Grava o arquivo no disco
    File arquivo = new File(chooser.getSelectedFile().getParentFile(), &quot;saida.txt&quot;);
    try (PrintWriter printWriter = new PrintWriter(arquivo)) {
        for (int valor : vetor) {
            printWriter.printf(&quot;%d &quot;, valor);
        }
    }
}

}
[/code]