2009-09-10 13 views
0

Ce que je fais, c'est que je lis dans un fichier html et je cherche un emplacement spécifique dans le code HTML pour que je puisse entrer du texte. Donc j'utilise un lecteur buffered pour lire dans le fichier html et le diviser par le tag. Je veux entrer un texte avant cela, mais je ne suis pas sûr de savoir comment le faire. Le html serait alors le long des lignes de ... (newText) (/ HEAD) (Les parenthèses de la tête ronde sont censées être des parenthèses inclinées Ne savent pas comment les insérer)Lire un fichier et l'éditer en Java

Aurais-je besoin d'un PrintWriter le même fichier et si oui, comment dirais-je cela pour l'écrire au bon endroit. Je ne sais pas quel serait le moyen le plus efficace de faire quelque chose comme ça. S'il vous plaît, aidez.

Merci d'avance.


Voici une partie de mon code java:

 File f = new File("newFile.html"); 
     FileOutputStream fos = new FileOutputStream(f); 
     PrintWriter pw = new PrintWriter(fos); 


     BufferedReader read = new BufferedReader(new FileReader("file.html")); 
     String str; 
     int i=0; 
     boolean found = false; 
     while((str= read.readLine()) != null) 
     { 

      String[] data = str.split("</HEAD>"); 


      if(found == false) 
      { 
       pw.write(data[0]); 
       System.out.println(data[0]); 
       pw.write("</script>"); 
       found = true; 
      } 
      if(i < 1) 
      { 
      pw.write(data[1]); 
      System.out.println(data[1]); 
      i++; 
      } 
      pw.write(str); 
      System.out.println(str); 


     } 
     } 
     catch (Exception e) { 
     e.printStackTrace(); 
     } 

Quand je fais cela, il arrive à un point dans le fichier et je reçois ces erreurs:

ERREUR FATALE: MERLIN: Impossible pour se connecter à l'API EDG,

Impossible de trouver le fichier de .edg_properties.,

java.lang.OutOfMemor yError: impossible de créer un nouveau fil natif,

ne peut pas tronquer table,

EXCEPTION: Peut-connexion pas ouvert au serveur: SQLExceptio,

Caught IOException: java.io.IOException: JZ0C0: Connexion est déjà fermé , ...

Je ne suis pas sûr de savoir pourquoi je reçois ces ou ce que tout cela signifie?

s'il vous plaît aide.

+0

crochets doivent être échappés (http://www.w3.org/TR/REC-xml/#dt-escape): < > – wierob

+0

Le reste de ceci n'a rien à voir avec votre question. C'est lié à votre base de données et aux fichiers de configuration spécifiques à l'application ou à quelque chose. Vous ne savez pas exactement ce qu'est "l'API EDG", mais ce n'est pas Java standard. –

Répondre

1

La plupart des utilisateurs suggèrent d'écrire dans un fichier temporaire, puis de copier le fichier temporaire sur l'original en cas de réussite.

4

devrait être assez facile:

  • fichier Lire dans une chaîne
  • Divisé en avant/après des morceaux
  • Ouvrez un fichier temporaire pour écrire
  • écriture avant morceau, votre texte, après morceau
  • Gros plan, et déplacer le fichier temporaire à l'original

On dirait que vous vous interrogez sur les deux dernières étapes en particulier. Voici le code essentiel:

File htmlFile = ...; 
... 
File tempFile = File.createTempFile("foo", ".html"); 
FileWriter writer = new FileWriter(tempFile); 
writer.write(before); 
writer.write(yourText); 
writer.write(after); 
writer.close(); 
tempFile.renameTo(htmlFile); 
+0

Comment savoir où j'écris dans le fichier actuel? Disons que je veux ajouter du texte à l'intérieur d'une balise body, comment le saurai-je? – Faizan

0

Pour la lecture et l'écriture, vous pouvez utiliser FileReaders/FileWriters ou les classes de flux IO correspondantes.

Pour l'édition, je suggère d'utiliser un HTML parser pour gérer le document. Il peut lire le document HTML dans une structure de données interne qui simplifie vos efforts pour rechercher du contenu et appliquer des modifications. (Most?) Les analyseurs peuvent sérialiser à nouveau le document en HTML. Au moins, vous êtes sûr de ne pas corrompre la structure du document HTML.

0

Suite à la liste des erreurs dans votre édition, une grande partie de celles-ci provient probablement de OutOfMemoryError. Cela signifie que vous avez simplement manqué de mémoire dans la JVM, Java n'a donc pas pu allouer d'objets. Cela peut être dû à une fuite de mémoire dans votre application, ou tout simplement au fait que le travail que vous essayez de faire nécessite plus de mémoire transitoire que vous ne l'avez affecté.

Vous pouvez augmenter la quantité de mémoire que la machine virtuelle démarre avec en fournissant l'argument Xmx à l'exécutable java, .: par exemple

-Xmx1024m 

fixerait la taille maximale du tas 1024 méga-octets.

Les autres problèmes peuvent être causés par cela; Lorsque les objets ne peuvent pas être créés ou modifiés de manière fiable, beaucoup de choses étranges ont tendance à se produire. Cela dit, il y a quelques petites choses qui semblent pouvoir agir. En particulier, quel que soit MERLIN il semble qu'il ne peut pas faire son travail, car il a besoin d'un fichier de propriétés pour EDG, qu'il est incapable de trouver dans l'emplacement qu'il recherche. Vous devrez probablement y placer un fichier de configuration ou lui indiquer de regarder un autre emplacement.

Les autres IOExceptions sont assez explicites. Votre programme n'a pas pu établir une connexion au serveur à cause d'une exception SQLException (l'exception sous-jacente elle-même sera probablement trouvée dans les journaux); et une autre partie du programme a essayé de communiquer avec une machine distante en utilisant une connexion fermée. Je verrais à réparer le fichier de propriétés (si ce n'est pas une erreur bénigne) et les problèmes de mémoire d'abord, puis voir si l'un des problèmes restants se manifestent encore.

+0

"OutOfMemoryError" n'est pas dû au manque d'espace de tas. C'est à cause de l'allocation d'un tas de threads (voir se plaint de ne pas pouvoir créer un nouveau thread). Vous devrez créer un tas de threads à partir de la mémoire (non-heap), même si la taille de la pile de threads standard est de 2 Mo. Vous faites probablement trop de discussions. Vous pouvez réduire la taille de la pile de threads avec -Xss512k ou quelque chose, mais cela ne résout pas vraiment le problème et provoque probablement d'autres problèmes. En effet, le reste est lié à un cadre spécifique à l'application qui barfue. –

Questions connexes