Einlesen von Datei funktioniert nicht

Joob

Top Contributor
Ich habe eine Methode und verwende diese auch sehr häufig um Daten aus Dateien einzulesen.

Jetzt will ich eine CSV einlesen und nichts wird eingelesen.
an der Stelle fileSC.hasnext() springt er immer wieder zum Ende, als wäre der Zeiger immer am Ende der Datei.
Sonst haut das hin.
Hat jemand eine Idee.

Code:
public String ReadFromFile(String PfadName, String FileName, Integer lineNO, Boolean checkFile) throws FileNotFoundException {

    /**
    * aus einer Textdatei auf der LocalMachine eine definierte Zeile lesen
    *
    * @param PfadName     
    * @param FileName     
    * @param lineNO       
    * @param checkFile    
    *
    * used Functions       CheckFileExist
    *
    * @throws FileNotFoundException on error.   
    */      

        String fs = File.separator;
        String line = null;
        Integer count = 0;
        Boolean fileExitst = true;

        if ( checkFile == true ) {
            fileExitst = CheckFileExist(PfadName, FileName);
        }

        if (fileExitst) {
           
            File aktFile = new File(PfadName + fs + FileName);
           
            Scanner fileSC = new Scanner(aktFile);
         
            while (fileSC.hasNext()) {

                if (count == lineNO) {
                        line = fileSC.nextLine();
                        break;
                }
                fileSC.nextLine();
                count++;
            }

            fileSC.close();
        }
       
        return line;

    }


By the way:
die Methode habe ich vor einiger Zeit programmiert, aber muss das sein das er immer erst durch die ganze Datei marschiert um eine definiert Zeile auszulesen ?
 
Ich habe die Datei mit Excel erstellt.
Dann habe ich gerade den Dateiinhalt in eine Textdatei kopiert und noch mal probiert.
Scheint zu laufen.

Aber das ist ja keine Lösung, es muss doch einen Grund geben.
 
Kannst Du hier mal eine Test-CSV anhängen, bei der es nicht funktioniert? Ich vermute mal, dass das Ding eine BOM hat und der Scanner durcheinander kommt oder die Kodierung nicht zu Deiner passt. Führst Du Dein Java-Programm unter Windows aus? Wenn ja, aus der IDE heraus oder über die Kommandozeile?

Abgesehen davon, würde ich keinen Scanner verwenden.
 
https://de.wikipedia.org/wiki/Byte_Order_Mark

Unter Windows aus der IDE
Könnte sein, dass die IDE UTF-8 als Zeichensatz verwendet. Ändere mal Scanner fileSC = new Scanner(aktFile); zu Scanner fileSC = new Scanner(aktFile, "CP1252"); ab.

Warum keinen Scanner, was sind die Alternativen für zeilenweises einlesen
Weil man dafür keinen Scanner braucht. Ein BufferedReader tuts ebenso wie
Java:
String nteZeile = Files.lines(Paths.get(dateiName)).skip(n-1).findFirst().orElse(null);

In dem Zusammenhang:
aber muss das sein das er immer erst durch die ganze Datei marschiert um eine definiert Zeile auszulesen ?
Hat man nur eine CSV zur Verfügung, muss man das wenigstens einmal machen. Dann hat man natürlich verschiedene Möglichkeiten der Optimierung. Das hängt aber davon ab, was man vorhat.
 

Zurück
Oben