NumberFormatException ao analisar um int

Estou criando um leitor / gravador de arquivos que pode acessar um determinado arquivo e salvar / ler dele. Estou tendo um problema ao ler o arquivo. O conteúdo é inteiro, string e duplo separados por "|" delimitadores. Estou usando StringTokenizer para separar os tokens e salvá-los em cada variável individual, mas quando estou lendo os números inteiros, recebo um NumberFormatException mesmo que a string contenha apenas um int.

Aqui está o código:

FileReader fr = new FileReader(filename);
BufferedReader buff = new BufferedReader(fr);
String line;

while ((line = buff.readLine()) != null) {
    StringTokenizer st = new StringTokenizer(line, "|");
    while (st.hasMoreElements()) {
         int Id = Integer.parseInt(st.nextToken());
         String Name = st.nextToken();
         double cordX = Double.parseDouble(st.nextToken());
         double cordY = Double.parseDouble(st.nextToken());
    }
}

Uma linha de exemplo do arquivo:

8502113|Aarau|47.391355|8.051251

E o erro:

java.lang.NumberFormatException: For input string: "8502113"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at storage.FileUtilities.readCitiesFromFile(FileUtilities.java:63)
at basics.Test.main(Test.java:16)

Estou faltando alguma coisa aqui? O StringTokenizer está violando a string de algum modo que eu não conheço?

EDIT: Aqui está o código que cria o arquivo:

FileWriter fw = new FileWriter(filename, !overwrite); // For FileWriter true = append, false = overwrite, so we flip the value.
    BufferedWriter buff = new BufferedWriter(fw);
    String coordConvertor;

    for (int i = 0; i <= cities.size() - 1; i++) {
        buff.write(Integer.toString(cities.get(i).getId()));
        buff.write("|");
        buff.write(cities.get(i).getName());
        buff.write("|");
        coordConvertor = Double.toString(cities.get(i).getCoord().getX());
        buff.write(coordConvertor);
        buff.write("|");
        coordConvertor = Double.toString(cities.get(i).getCoord().getY());
        buff.write(coordConvertor);
        buff.newLine();

questionAnswers(1)

yourAnswerToTheQuestion