Arquivos, Strings

Estou bolando um resincronizador de legenda simples.


    public void resyncLegenda(File arquivo, int milisegundos) throws FileNotFoundException, IOException{

        FileReader reader = new FileReader(arquivo);
        FileWriter writer = new FileWriter("d:/temp.srt");
        BufferedReader leitor = new BufferedReader(reader);
        Parser parser = new Parser();

        String tempo = null;
        String tempoInicio = null;
        String tempoFim = null;
        String numero = null;
        String tempoInicioS = null;
        String tempoFimS = null;
        String tempoS = null;

        int tempoInicioMilisec;
        int tempoFimMilisec;

        do{
            if(leitor.readLine().equals("")){
                numero = leitor.readLine();
                writer.write("\r\n");
                writer.write(numero+"\r\n");
                tempo = leitor.readLine();

                tempoInicio = String.copyValueOf(tempo.toCharArray(), 0, 12);
                tempoFim = String.copyValueOf(tempo.toCharArray(),17,12);

                tempoInicioMilisec = parser.retornaTempoEmMiliSec(tempoInicio);
                tempoFimMilisec = parser.retornaTempoEmMiliSec(tempoFim);
                tempoInicioMilisec = tempoInicioMilisec + milisegundos;
                tempoFimMilisec = tempoFimMilisec + milisegundos;

                tempoInicioS = parser.retornaTempoEmString(tempoInicioMilisec);
                tempoFimS = parser.retornaTempoEmString(tempoFimMilisec);
                tempoS = tempoInicioS+" --> "+tempoFimS;
                writer.write(tempoS);

                writer.write("\r\n");

            }
        }while(leitor.ready());





    }

Nessa linha, ele lança um null pointer exeption

                tempoInicio = String.copyValueOf(tempo.toCharArray(), 0, 12);

Ja tentei de tudo, e nao deu pra resolver.

P.S.: Se eu colocar um println abaixo dessa linha, ele varre todo o arquivo de origem normalmente, e no fim lança a exceção

Fiz mais uns testes aqui e descobri uma coisa.

Quando o arquivo de entrada é pequeno, ele não chega nem a fazer a copia, mas exibe as informações no terminal em que eu executo.
Quando é muito grande, ele copia parte do texto para o arquivo de destino, mas exibe as informações no terminal em que eu executo.

Acho que ele está lendo o arquivo, disparando a exeção assim que ele atinge o final, e copiando apenas uma parte …
Isso é possivel?