readLine()

Filinchen

Grünschnabel
Das Programm soll nicht jede zeile einzeln lesen, sonder den eingelesen text als ganzes betrachten,damit er mir z.B. die Länge des Textes wiedergibt. Jetzt weiß ich aber nicht, welche Anweisungen es gibt, damit er die Zeilen nicht einzeln liest.


Java:
...
	File file = new File(filename);
	
	try {
		FileReader reader = new FileReader(file);
		BufferedReader buff = new BufferedReader(reader);  
		
		while ((zeile = buff.readLine())  != null)  < Hier muss sicher iwas andres hin :)
		{System.out.println(zeile); 
                                  
                            ...
                }
 
Also...
1. Option:
  • Du gehst auf die Commons IO Seite und lädst dir das commons-io-...-bin.zip runter
  • Anschließend entpackst du das und kopierst die commons-io-...jar Datei in dein Projekt
  • Dann machst du einen Rechtsklick auf die commons-io-...jar Datei und klickst auf 'Build Path' --> 'add to Build Path'

2. Option: (selber programmieren)
Du kannst das natürlich auch selber machen.

Ein Lösungsvorschlag:
Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileScanner
{
	/**
	 * @param file
	 * @return
	 */
	public String fileToString(File file) {
		StringBuilder holeText = new StringBuilder();
		
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			
			String line;
			while((line = reader.readLine()) != null) {
				holeText.append(line); // <-- nächste Zeile hinzufügen
				holeText.append("\n"); // <-- für den Zeilenumbruch
			}
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			if(reader != null) {
				try {
					reader.close();
				} catch(IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return holeText.toString();
	}
}

Ich hoffe das hilft dir weiter :)
 
Erzeug dir einfach einen StringBuilder und häng in der Schleife alles Zeilen an den builder an.

Java:
StringBuilder builder = new StringBuilder();

while ((zeile = buff.readLine())  != null) {
    builder.append(zeile);
}

System.out.println(builder.toString());

Edit: Zu langsam ;-)
 
Danke erstmal.
Noch eine Frage.
Bei dem Text handelt es sich um eine DNA Sequenz.
">gi|291280824:4365885-4366877 Escherichia coli
ATGAAAATAAAGAACATTCTACTCACCCTTTGCACCTCACT
ACCTCACTCCTGCTTACCAAACCTCACTCCTGCTTACCAA"

Nun soll aber die erste Zeile (d.h. nach dem >) nicht beachtet werden, also ab der zweiten sollen die Berechnungen beginnen.
Ich dachte vielleicht kann ich da mit einer if- Verzweigung iwie angeben, dass diese Zeile nicht beachtet werden soll.
 
Du kannst das mittels indexOf und substring relativ leicht realisieren. Hier ein Beispiel:

Code:
/**
	 * 
	 */
	public void berechne() {
		String string = fileToString(new File("DeineDatei.txt"));
		
		/*
		 * gibt die Position des ersten Zeilenumbruchs zurück
		 */
		int firstLineBreakIndex = string.indexOf("\n");
		
		/*
		 * dadurch schneidest du alles, was vor dem ersten Zeilenumbruch steht ab
		 * ==> +1 daher, da sonst der Zeilenumbruch noch mit im dna-String stehen würde
		 */
		String dna = string.substring(firstLineBreakIndex+1, string.length());
		
		System.out.println(dna);
	}
 
Wieso so kompliziert? Zu mal es auf keinen Fall performant ist, nach dem man den Text bereits Zeilenweise eingelesen hat, ihn anschließend schon wieder an den Zeilenumbrüchen zu zerteilen.
Ruf vor der Schleife einmal "readLine" auf.

Hier nochmal anhand von meinem obigen Code.

Java:
StringBuilder builder = new StringBuilder();

String firstLine = buff.readLine();
 
while ((zeile = buff.readLine())  != null) {
    builder.append(zeile);
}

System.out.println(firstLine);
System.out.println(builder.toString());

Und Falls du die Gesamtlänge brauchst, kannst du ja einfach beide Längen addieren.
 

Neue Beiträge

Zurück