8
votes

Java: Comment utiliser BufferDreader pour lire une ligne spécifique

permet de dire que j'ai un fichier texte appelé: data.txt (contient 2000 lignes)

Comment lire spécifique une ligne spécifique de: 500-1500, puis 1500-2000 et afficher la sortie de la ligne spécifique?

Ce code va lire des fichiers entiers (2000 lignes) xxx

Comment puis-je modifier le code ci-dessus pour lire une ligne spécifique ?


7 commentaires

Pourquoi ne comptez-vous pas simplement quelle ligne vous êtes et si vous êtes dans la gamme souhaitée, vous produisez les lignes une après une?


comment je fais ça? Je sais comment compter mais pas sûr de sortir la ligne de la gamme


Vous comptez, puis vous vérifiez le compte avec un si instruction.


Vous avez probablement besoin d'un accès de fichiers absolu, essayez de rechercher


Vous devriez compter les lignes dès le début du fichier ou même mieux analyser en utilisant linenumberreader


n'importe quel exemple serait génial


LinenumberReder combiné avec scanner: Stackoverflow.com/Questtions/1332297/...


3 Réponses :


16
votes

Je suggère java.io.linenumberreader. Il étend la bufferreader et Vous pouvez utiliser son linenumberreader.getlinenenumber (); code> pour obtenir le numéro de ligne actuel

Vous pouvez également utiliser java 7 java.nio.file.files.readalllines code> qui retourne une liste code> si elle vous convient mieux p>

Remarque: P>

1) Favorez StringBuilder sur Stressbuffer, Stringbuffer est juste une classe héritée p>

2) contenu.append (system.geproperty ("line.sparator")) code> n'a pas l'air bien Utilisez contenu.append (fichier.sparator) code> à la place p>

3) La capture d'une exception semble sans importance, je suggérerais également de modifier votre code comme p> xxx Pré>

Le code est maintenant plus propre à mon avis. Et si vous êtes en Java 7, utilisez ESSAY-RESSOURCES P>

public static String[] getContents(File aFile) throws IOException {
    try (LineNumberReader rdr = new LineNumberReader(new FileReader(aFile))) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        for (String line = null; (line = rdr.readLine()) != null;) {
            if (rdr.getLineNumber() >= 1500) {
                sb2.append(line).append(File.pathSeparatorChar);
            } else if (rdr.getLineNumber() > 500) {
                sb1.append(line).append(File.pathSeparatorChar);
            }
        }
        return new String[] { sb1.toString(), sb2.toString() };
    }
}


5 commentaires

Il semble que Redbox veuille 500-1500 et 1500 - 2000 comme deux textes distincts, ou il semble donc


Je veux mettre le texte de (500-1500) à Stringa puis texte de (1500-2000) en tant que stringb possible pour le faire?


Ensuite, utilisez linenumberreader, ce sera plus efficace


1 autre question, Stringbuilder est pour JDK 1.4 et plus?


Avez-vous autre moyen que StressBuilder? Comme mon projet utilise une version plus ancienne de JDK, le StringBuilder ne fonctionne pas ..



4
votes

Une solution légèrement plus propre serait d'utiliser des filsutils à Apache Commons. http://commons.apache.org/io /AP-Release/org/apache/commons/io/fileUtils.html Exemple d'échantillon: xxx


3 commentaires

Dois-je charger des libs Apache? im utilisant jdéveloppeur


Oui, le fichier Apache Commons-io Jar devrait être dans la classe de classe. jarfinder.com/index.php/java/ Info / ...


Le lien de votre réponse est mort Vous trouverez des fichiers à partir de: Commons.apache.org/proper/ Commons-io



4
votes

Le meilleur moyen est d'utiliser BufferDreader. Si vous souhaitez lire la ligne 32 par exemple: xxx

maintenant dans la chaîne linethreetwo Vous avez stocké la ligne 32.


1 commentaires

Bufferedreader est plus rapide que Linenumberreader. Solution la plus rapide.