tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
380
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Filinchen Filinchen ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    8
    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.


    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     
    ...
        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); 
                                      
                                ...
                    }
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi,

    schau dir doch mal die API von Commons IO an. Da gibt es eine Klasse FileUtils. Mit dieser Klasse kannst du die Methode readFileToString(File file) aufrufen. Dann bekommst du den kompletten Dateiinhalt als String zurückgegeben.

    Viele Grüße

    Sporticus
     

  3. #3
    Filinchen Filinchen ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    8
    Ich kann damit leider nicht so viel anfangen. Was muss ich denn da genau machen?
     

  4. #4
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    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
     

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Erzeug dir einfach einen StringBuilder und häng in der Schleife alles Zeilen an den builder an.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    StringBuilder builder = new StringBuilder();
     
    while ((zeile = buff.readLine())  != null) {
        builder.append(zeile);
    }
     
    System.out.println(builder.toString());

    Edit: Zu langsam
     

  6. #6
    Filinchen Filinchen ist offline Rookie
    Registriert seit
    Jul 2011
    Beiträge
    8
    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.
     

  7. #7
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Du kannst das mittels indexOf und substring relativ leicht realisieren. Hier ein Beispiel:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    /**
         * 
         */
        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);
        }
     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    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.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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.
     

Ähnliche Themen

  1. Readline frage
    Von DerKoenig im Forum Java
    Antworten: 6
    Letzter Beitrag: 04.11.10, 13:04
  2. [VB.NET] Enum-Werte per Console.Readline einlesen
    Von DirkHo im Forum .NET Datenverwaltung
    Antworten: 2
    Letzter Beitrag: 25.04.07, 14:08
  3. readline() nur wenn bestimmte char in line vorkommen
    Von mashine-obf im Forum .NET Datenverwaltung
    Antworten: 6
    Letzter Beitrag: 01.09.05, 15:12
  4. GNU Readline & Sockets
    Von jccTeq im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 12.05.05, 12:52
  5. Antworten: 4
    Letzter Beitrag: 05.04.05, 09:06