Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Erste:
Die Methode setLineNumber aus der Klasse LineNumberReader funktioniert einfach nicht. Die Methode soll doch eigentlich die mithilfe der Parameterliste übergebene Zahl als aktuelle Zeilennummer setzten?!
Beispielcode:
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
public class Test {
public static void main(String[] args) throws IOException {
try{
File file = new File("C:/Dokumente und Einstellungen/Tom/Desktop/test.txt");
FileReader reader = new FileReader(file);
LineNumberReader linie = new LineNumberReader(reader);
String eins = linie.readLine();
linie.setLineNumber(4);
String zwei = linie.readLine();
System.out.println(eins);
System.out.println(zwei);
} catch(FileNotFoundException e){
System.err.println("Fehler");
}
}
}
Im Textdokument steht in der ersten Zeile "Zeile 1", in der zweiten "Zeile 2" und so weiter. Folglich sollte doch die Ausgabe "Zeile 1" und "Zeile 4" erscheinen. Tut es jedoch nicht es erscheint Zeile 1 und Zeile 2.
Warum ist das so, bzw wie kann ich mir Abhilfe schaffen doch aus einer von mir gewählten Linie zu lesen?
Zweite Frage:
Gibt es eine einfache Möglichkeit zu Überprüfen ob eine Zahl x im Array array enthalten ist. Ich kann das natürlich mit einer For-Schleife überprüfen, möchte jedoch wissen ob es eine einfache Möglichkeit gibt.
Java:
int a = 1;
int[] b = {1,2,3,4};
if(a istTeilVon b){
mach das...
}
http://download.oracle.com/javase/6/docs/api/java/io/LineNumberReader.html hat gesagt.:
Note however, that setLineNumber(int) does not actually change the current position in the stream; it only changes the value that will be returned by getLineNumber().
1.) der LineNumberReader ist nur dafür da, dass er quasi für dich die Zeilen die du gelesen hast merkt und du diese abfragen kannst. Du müsstest dir also nicht selbst merken in welche rZeile du jetzt gerade bist falls du die Zeilennummer wissen willst. Das Setzen mit setLineNumber verändert aber nicht die Position wo du dich gerade befindest in der Datei, sondenr setzt halt einfach den "Zähler" auf die gegebene Zahl.
Lies dazu auch die API DOc
http://download.oracle.com/javase/6/docs/api/java/io/LineNumberReader.html hat gesagt.:
Note however, that setLineNumber(int) does not actually change the current position in the stream; it only changes the value that will be returned by getLineNumber().
2.) Wenn das Array sortiert ist, wie in deinem Beispiel, könntest du Arrays.binarySearch(b,a) benutzen!
Lese auch da die Doc
EDIT: der Vorschlag von XHelp würde gehen, wenn du ein Integer[]-Array hättest!
Haben die Zeilen ein bestimmtes Muster/eine bestimme Länge? Dann könnte das evtl. leicht mit dem RandomAccessFile gehen, ansonsten denke ich bleibt dir keine andere Wahl als die vorherigen Zeilen "ins Leere" laufen zu lassen...
Oder eben wenn die Datei nicht sehr groß ist und du öfters bestimmte Zeilen lesen willst, könntest du eben auch das File einmal komplett einlesen und die Zeilen in einer Liste speichern(da gibts ne` Methode in den apache commons io die das so macht) und dann könntest du eben dort mit get(zeilennummer) darauf zugreifen....