Ich habe Probleme mit dem BufferedReader
Ich möchte die 6 Zeilen einer Textdatei drucken:
public class Reader {
public static void main(String[]args) throws IOException{
FileReader in = new FileReader("C:/test.txt");
BufferedReader br = new BufferedReader(in);
while (br.readLine() != null) {
System.out.println(br.readLine());
}
in.close();
}
Was ich nun bei jedem Aufruf der readLine () -Methode herausfinden kann, wird automatisch in die nächste Zeile verschoben.
Daher kann ich die Bedingung br.readLine ()! = Null nicht verwenden, da sie bereits um eine Zeile vorgerückt wird und ich die Ausgabe bekomme:
Line 2
Line 4
Line 6
Mit welcher Bedingung prüfe ich, ob sich im Textfeld noch eine neue Zeile befindet?.
Danke im Voraus!
Das ist das Problem:
while (br.readLine() != null) {
System.out.println(br.readLine());
}
Sie haben zwei Aufrufe für readLine
- das erste nur prüft, ob es eine Zeile gibt (liest sie aber und wirft sie weg) und das zweite liest die next Zeile. Sie wollen:
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Jetzt rufen wir nur readLine()
einmal pro Loop-Iteration auf und verwenden die Zeile, die wir beide gelesen haben, für das "Sind wir fertig?" und "die Linie ausdrucken" Teile.
Sie lesen line
durch while
-Schleife und durch die Schleife lesen Sie die nächste Zeile. Lesen Sie sie einfach in while-Schleife
String s;
while ((s=br.readLine()) != null) {
System.out.println(s);
}
Sie können das Ergebnis von br.readLine()
einer Variablen zuweisen und dieses sowohl für die Verarbeitung als auch für die Überprüfung verwenden, z.
String line = br.readLine();
while (line != null) { // You might also want to check for empty?
System.out.println(line);
line = br.readLine();
}
private void readFile() throws Exception {
AsynchronousFileChannel input=AsynchronousFileChannel.open(Paths.get("E:/dicom_server_storage/abc.txt"),StandardOpenOption.READ);
ByteBuffer buffer=ByteBuffer.allocate(1024);
input.read(buffer,0,null,new CompletionHandler<Integer,Void>(){
@Override public void completed( Integer result, Void attachment){
System.out.println("Done reading the file.");
}
@Override public void failed( Throwable exc, Void attachment){
System.err.println("An error occured:" + exc.getMessage());
}
}
);
System.out.println("This thread keeps on running");
Thread.sleep(100);
}
sie können es in einem Array speichern und dann die gewünschte Zeile verwenden ... ... Dies ist der Code-Ausschnitt, den ich zum Lesen der Zeile aus der Datei und zum Speichern in einem String-Array verwendet habe.
public class user {
public static void main(String x[]) throws IOException{
BufferedReader b=new BufferedReader(new FileReader("<path to file>"));
String[] user=new String[30];
String line="";
while ((line = b.readLine()) != null) {
user[i]=line;
System.out.println(user[1]);
i++;
}
}
}
Vielleicht meinst du das so:
public class Reader {
public static void main(String[]args) throws IOException{
FileReader in = new FileReader("C:/test.txt");
BufferedReader br = new BufferedReader(in);
String line = br.readLine();
while (line!=null) {
System.out.println(line);
line = br.readLine();
}
in.close();
}
oder
public String getFileStream(final String inputFile) {
String result = "";
Scanner s = null;
try {
s = new Scanner(new BufferedReader(new FileReader(inputFile)));
while (s.hasNext()) {
result = result + s.nextLine();
}
} catch (final IOException ex) {
ex.printStackTrace();
} finally {
if (s != null) {
s.close();
}
}
return result;
}
Dies bekommt auch die erste Zeile.
Versuchen:
String text= br.readLine();
while (text != null)
{
System.out.println(text);
text=br.readLine();
}
in.close();