2009-09-02 11 views
1

Est-ce que quelqu'un sait comment supprimer une ligne d'un fichier texte.Supprimer une ligne du grand fichier txt dans Java

Je cherche autre chose que lire et écrire ligne par ligne et sauter la ligne que vous voulez enlever.

Par exemple: Mon fichier dénombre 1346 lignes et je veux supprimer la ligne 520.

+0

connaissez-vous par hasard le contenu de la dernière ligne? – stefita

+0

Connaissez-vous la position de la ligne? Ou savez-vous à quoi ressemble la ligne? – LB40

+0

Je peux faire mon programme que je calcule la position de la ligne, oui. –

Répondre

4

Un fichier texte n'est pas quelque chose qui prend en charge la réorganisation à coût zéro. C'est simplement une séquence contiguë d'octets. Si vous souhaitez supprimer certains octets du milieu du fichier (et par conséquent déplacer tous les octets suivants vers le haut pour couvrir les octets supprimés), vous devez copier et réécrire tous les octets suivants.

Vous avez quelques options. Lisez le fichier entier en mémoire, effectuez votre suppression, puis écrivez le fichier. (espérons-le à un fichier temporaire que vous renommez au-dessus de l'original après avoir terminé avec succès l'écriture) Ou faire un peu de jeu de fantaisie avec juste lire dans une valeur de tampons de données du fichier source et de travailler dessus.

+0

J'allais faire le même commentaire: quelle que soit la langue, il n'y a pas de magie pour supprimer des octets au milieu d'un fichier (en la plupart des systèmes d'exploitation que je connais, au moins.) Donc je viens de +1 à votre réponse. – PhiLho

0

Vous pouvez lire le fichier entier dans, faire une regex remplacer (étant donné que vous connaissez le match exact, etc.) puis d'écrire le fichier reculer

Personnellement, je ne suis pas sûr de la valeur que cette réponse est :)

+0

c'est comme je l'ai expliqué. Je ne veux pas lire et écrire. –

+0

ok j'ai mal compris votre question –

0

bien, si vous connaissez la longueur (ou le contenu de la dernière ligne):

long lastLineLength = lastLine.length(); 
RandomAccessFile raf = new RandomAccessFile("RandFile.txt", "rw"); 
long length = raf.length(); 
raf.setLength(length - lastLineLength); 
raf.close(); 
+0

c'est plus ce que je veux mais, c'est juste la dernière ligne –

+0

désolé, ne peut pas comprendre votre commentaire – stefita

+0

@stefita vous supprimez uniquement la dernière ligne. Ce n'est pas la question, je suppose qu'il veut supprimer une ligne arbitraire. – LB40

2

Est-ce que la solution besoin d'être écrit en Java? Les commandes UNIX sed et grep sont faites uniquement dans ce but et fonctionneront probablement mieux. Si vous utilisez Windows, vous pouvez accéder à ces outils via Cygwin ou il peut y avoir des ports natifs.

+0

Je suis d'accord, mais je soupçonne que cette question aurait dû avoir un "devoir" tag, donc il doit rester en Java. (notez la lettre 'O' dans le numéro 52O, au lieu de 520. –

+0

désolé de l'O –

1

Oui. Rob a raison. essayer cette

sed -e '520d' <yourfile> 

rediriger la sortie vers nouveau fichier

ici 520 est le numéro de la ligne que vous souhaitez supprimer

Questions connexes