web-dev-qa-db-fra.com

Le moyen le plus rapide de lire un fichier ligne par ligne avec 2 jeux de chaînes sur chaque ligne?

Quelle est la façon la plus rapide de lire ligne par ligne, chaque ligne contenant deux chaînes. Un exemple de fichier d'entrée serait:

Fastest, Way
To, Read
One, File
Line, By Line
.... can be a large file

Il y a toujours deux ensembles de chaînes sur chaque ligne dont j'ai besoin même s'il y a des espaces entre la chaîne, par ex. "Par ligne"

Actuellement j'utilise

FileReader a = new FileReader(file);
            BufferedReader br = new BufferedReader(a);
            String line;
            line = br.readLine();

            long b = System.currentTimeMillis();
            while(line != null){

Est-ce assez efficace ou existe-t-il une manière plus efficace d'utiliser la norme Java API (pas de bibliothèques externes s'il vous plaît) Toute aide est appréciée Merci!

17
xiaolin

Cela dépend de ce que tu veux dire quand tu dis "efficace". Du point de vue des performances, c'est OK. Si vous posez des questions sur le style et la taille du code, je le fais presque presque avec une petite correction:

        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while((line = br.readLine()) != null) {
             // do something with line.
        }

Pour lire à partir de STDIN Java 6 vous propose une autre façon. Utilisez la classe Console et ses méthodes

readLine() et readLine(fmt, Object... args)

40
AlexR
import Java.util.*;
import Java.io.*;
public class Netik {
    /* File text is
     * this, is
     * a, test,
     * of, the
     * scanner, I
     * wrote, for
     * Netik, on
     * Stack, Overflow
     */
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(new File("test.txt"));
        sc.useDelimiter("(\\s|,)"); // this means whitespace or comma
        while(sc.hasNext()) {
            String next = sc.next();
            if(next.length() > 0)
                System.out.println(next);
        }
    }
}

Le résultat:

C:\Documents and Settings\glowcoder\My Documents>Java Netik
this
is
a
test
of
the
scanner
I
wrote
for
Netik
on
Stack
Overflow

C:\Documents and Settings\glowcoder\My Documents>
2
corsiKa

Si vous voulez séparer deux ensembles de chaînes, vous pouvez le faire de cette façon:

BufferedReader in = new BufferedReader(new FileReader(file));
String str;
while ((str = in.readLine()) != null) {
    String[] strArr = str.split(",");
    System.out.println(strArr[0] + " " + strArr[1]);
}
in.close();
1
lukastymo