2009-11-05 3 views
0

J'essaie de lire un fichier puis d'ajouter du texte à un certain endroit dans le fichier (c.-à-d. @ Offset jabjab). Le problème se produit lorsque j'essaie d'écrire dans le fichier au décalage jabjab. Quelle est l'erreur?PrintWriter exception: String index out of range

Contenu du fichier:

Mi 
<?xml Version="1.0"?> 

_

File f = new File("data.dat"); 
    String brstring = null; 
    String entrystring = null; 
    try { 
     BufferedReader br = new BufferedReader(new FileReader(f)); 
     String line; 
     StringBuilder result = new StringBuilder(); 
     while ((line = br.readLine()) != null) { 
     result.append(line+"\r\n"); 
     } 
     br.close(); 
     System.out.print(result); 
     int jabjab = result.indexOf("?>"); 
     System.out.println(jabjab); 
     PrintWriter fo = new PrintWriter(f); 
     fo.write("ok", jabjab, 2); 
     fo.flush(); 
     fo.close(); 
    } catch (Exception ex) { 
     System.out.print(ex.getMessage()); 
    } 

Sortie de la console, y compris l'erreur:

Mi// output of the result string 
<?xml Version="1.0"?>//output of the result string 
23//output of jabjab 
String index out of range: 25String index out of range: 25//output of exception 

En outre, après cette méthode se fait le fichier original est maintenant vide ...

Répondre

3

Je pense que vous avez mal compris la définition de PrintWriter.write (string, offset, length). Si je lis correctement votre question, vous pensez qu'elle va écrire dans le fichier de sortie à ce décalage. Cependant, le décalage spécifie où la chaîne est écrite pour démarrer, donc vous essayez d'écrire à partir de la chaîne "ok" à partir du décalage 23. Puisque la chaîne n'a que 2 caractères, vous obtenez l'exception.

Jetez un coup d'œil à java.io.RandomAccessFile si vous voulez vraiment écraser des octets spécifiques dans un fichier. Notez que, bien que vous puissiez écraser des octets spécifiques dans un fichier avec d'autres octets, vous ne pouvez pas "insérer" des données ou supprimer des données d'un fichier (résultant en un fichier de longueur différente) sans les lire en mémoire.

Questions connexes