En Java, existe-t-il une méthode permettant de lire une ligne particulière d'un fichier, par exemple, la ligne 32?
Réponses
Trop de publicités?Si vous ne connaissez pas les lignes du fichier, vous ne pouvez pas accéder directement à la 32e ligne sans lire les 31 lignes précédentes.
Cela est vrai pour toutes les langues et tous les systèmes de fichiers modernes.
Donc, effectivement, vous lirez simplement les lignes jusqu'à ce que vous ayez trouvé la 32e.
Pas à ma connaissance, mais ce que vous pourriez faire est de parcourir les 31 premières lignes sans rien faire à l'aide de la fonction readline () de BufferedReader
FileInputStream fs= new FileInputStream("someFile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fs));
for(int i = 0; i < 30; ++i)
br.readLine();
String lineIWant = br.readLine();
Joachim est à droite sur la, bien sûr, et un autre de mise en œuvre de Chris (pour les petits fichiers seulement parce qu'il charge le fichier complet) pourrait être d'utiliser commons-io de Apache (bien que sans doute vous pourriez ne pas vouloir introduire une nouvelle dépendance juste pour ça, si vous le trouvez utile pour d'autres trucs trop bien, elle pourrait avoir un sens).
Par exemple:
String line32 = (String) FileUtils.readLines(file).get(31);
http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.lang.Chaîne de caractères)
Vous pouvez essayer de indexés-fichier-reader (Licence Apache 2.0). La classe IndexedFileReader a une méthode readLines(int, int) qui retourne un SortedMap dont la clé est le numéro de la ligne et de la valeur est la ligne qui a été lu.
Exemple:
File file = new File("src/test/resources/file.txt");
reader = new IndexedFileReader(file);
lines = reader.readLines(6, 10);
assertNotNull("Null result.", lines);
assertEquals("Incorrect length.", 5, lines.size());
assertTrue("Incorrect value.", lines.get(6).startsWith("[6]"));
assertTrue("Incorrect value.", lines.get(7).startsWith("[7]"));
assertTrue("Incorrect value.", lines.get(8).startsWith("[8]"));
assertTrue("Incorrect value.", lines.get(9).startsWith("[9]"));
assertTrue("Incorrect value.", lines.get(10).startsWith("[10]"));
L'exemple ci-dessus lit un fichier texte composé de 50 lignes dans le format suivant:
[1] The quick brown fox jumped over the lazy dog ODD
[2] The quick brown fox jumped over the lazy dog EVEN
Clause de non-responsabilité: j'ai écrit cette bibliothèque
Si vous parlez d'un fichier texte, il n'y a vraiment aucun moyen de le faire sans lire toutes les lignes qui le précèdent - Après tout, les lignes sont déterminées par la présence d'une nouvelle ligne, elle doit donc être lue.
Utilisez un flux prenant en charge readline, lisez simplement les premières lignes X-1 et exportez les résultats, puis traitez la suivante.