(csv)Datei lesen FindBug findet mgl. NullPointer - wie lösen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich hatte diese Methode um eine CSV-Datei einzulesen:
Code:
private void readCSVFile() throws IOException, ParseException {
		String lineInFile = new String();
		String[] fieldsPerLine = null;
		try {
			inputFile = new BufferedReader(new FileReader(csvFileName));
			readfile:                        // <<== a labeled statement
			while ( (lineInFile = inputFile.readLine()) != null ) {
				cntLines++;
				lineInFile = lineInFile.trim();
				// leere Zeilen nicht beachten
				if ( lineInFile.equals("") ) {
					continue readfile;
				}
				// Kommentarzeilen nicht beachten
				test4comment:                // <<== a labeled statement 
				for ( int i = 0; i < POSSIBLE_COMMENT_CHAR.length; i++ ) {
					if ( lineInFile.startsWith(POSSIBLE_COMMENT_CHAR[i]) ) {
						continue readfile;
					}
				}
				// Zeileninhalt als String Array aufnehmen
				fieldsPerLine = lineInFile.split(String.valueOf(delimiter));
				// prüfen ob der Eintrag aufgenommen wurde
				if ( ! allItemsInFile.add(fieldsPerLine) ) {
					throw new RuntimeException(" Aufnahme des Eintrages [ " + 
							Arrays.toString(fieldsPerLine) + " ] in Zeile [" + 
							cntLines + "] war nicht mgl.");
				} 
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if ( inputFile != null ) {
				inputFile.close();
			}
		}
	}
Den Java Code hab ich unter Eclipse mit dem FindBug Plugin prüfen lassen und so geändert:
Code:
private void readCSVFile() throws IOException, ParseException {
		String[] fieldsPerLine = null;
		try {
			inputFile = new BufferedReader(new FileReader(csvFileName));
			readfile:                        // <<== this is a labeled statement
			for ( cntLines = 1 ; true; cntLines++ ) {
				String lineInFile = inputFile.readLine();
				if ( lineInFile != null ) {
					lineInFile = lineInFile.trim();
					// leere Zeilen nicht beachten
					if ( lineInFile.equals("") ) {
						continue readfile;
					}
				}
				// Kommentarzeilen nicht beachten
				checkcomment:                // <<== this is a labeled statement 
					for ( int i = 0; i < POSSIBLE_COMMENT_CHAR.length; i++ ) {
						if ( lineInFile.startsWith(POSSIBLE_COMMENT_CHAR[i]) ) {
							continue readfile;   // hier die aeussere for-Schleife beendet
						}
					}
				// Zeileninhalt als String Array aufnehmen
				fieldsPerLine = lineInFile.split(String.valueOf(delimiter));
				// prüfen ob der Eintrag aufgenommen wurde
				if ( ! allItemsInFile.add(fieldsPerLine) ) {
					throw new RuntimeException(" Aufnahme des Eintrages [ " + 
							Arrays.toString(fieldsPerLine) + " ] in Zeile [" + 
							cntLines + "] war nicht mgl.");
				} 
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if ( inputFile != null ) {
				inputFile.close();
			}
		}
	}
Nun findet FindBug in der Zeile 18
Code:
if ( lineInFile.startsWith(POSSIBLE_COMMENT_CHAR[i]) ) {
den Fehler/Hinweis:
<NP> Null value is guaranteed to be dereferenced <NP_GUARANTEED_DEREF>
There is a statement or branch that if executed guarantees that a value is null at this point, and that value that is guaranteed to be dereferenced (except on forward paths involving runtime exceptions).
Ich prüf' doch schon in der Zeile 8 ob die Variable lineInFile möglicherweise null sein könnte. Macht hier eine nochmalige Prüfung noch einen Sinn ???:L Leider hab ich aktuell keine Idee was ich hier machen könnte, damit FindBug zufrieden ist.

Gruß & vielen Dank für Eure Hilfe
 

tfa

Top Contributor
Möglicherweise kann Findbugs nicht mit dem continue umgehen. Du könntest dem if aus Zeile 8 noch ein else spendieren.
 
S

SlaterB

Gast
Zeile 7, lineInFile wird eingelesen, kann null sein,
Zeile 8, if wird übersprungen,

Zeile 17, for Schleife beginnt,
garantiert Zugriff auf lineInFile -> NullPointerException,

die erste Version war besser
 
G

Guest

Gast
Hallo tfa,
hallo slaterB,

tfa hat gesagt.:
Möglicherweise kann Findbugs nicht mit dem continue umgehen. Du könntest dem if aus Zeile 8 noch ein else spendieren.
jup - so ist FindBugs zufrieden! :applaus:
Code:
...
						continue readfile;
					}
				} else {
					break readfile;
				}
				// Kommentarzeilen nicht beachten
				checkcomment:                // <<== this is a labeled statement 
...
SlaterB hat gesagt.:
Zeile 7, lineInFile wird eingelesen, kann null sein,
Zeile 8, if wird übersprungen,

Zeile 17, for Schleife beginnt,
garantiert Zugriff auf lineInFile -> NullPointerException,

die erste Version war besser
danke - das hab ich im ersten Moment so nicht kapiert :oops:
Mit der ersten Version war FindBugs auch nicht 100%ig zufrieden, da hat die Initialisierung der Variable linInFile in der Zeile 2 nicht gepasst:
<Dm> Method invokes inefficient new String() constructor <DM_STRING_VOID_CTOR>
Creating a new java.lang.String object using the no-argument constructor wastes memory because the object so created will be functionally indistinguishable from the empty string constant "". Java guarantees that identical string constants will be represented by the same String object. Therefore, you should just use the empty string constant directly
Deshalb hab ich dann das so umgebaut. Allerdings war es in der ersten Version nur dieser Hinweis.

In der zweiten Variante hatte ich jedoch einen möglicher Fehler eingebaut. Von dem her gesehen, hast Du natürlich recht. Jetzt wenn ich mir den Hinweis genau durchlese, dann hilft das hier in der erste Variante bei der Initialisierung der Variable linInFile in Zeile 2 ebenso:
Code:
 String lineInFile = "";
Ich werd' wieder die erste Variante nehmen - FindBugs ist damit 100%ig zufrieden - dank Euch! :D

vielen Dank Euch zwei für die Hilfe & Erklärung.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Scripte oder Programmcode aus Datei lesen? Java Basics - Anfänger-Themen 5
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
J Datei aus Projektfolder lesen Java Basics - Anfänger-Themen 12
B Aus Datei lesen Java Basics - Anfänger-Themen 23
B Aus Datei lesen Java Basics - Anfänger-Themen 0
C Input/Output Datei aus Startverzeichnis lesen Java Basics - Anfänger-Themen 6
G Input/Output Aus txt-Datei lesen, aus Ordner Java Basics - Anfänger-Themen 1
MaxG. Input/Output Datei lesen Java Basics - Anfänger-Themen 3
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
D Methoden Array aus Datei lesen und weitergeben? Java Basics - Anfänger-Themen 7
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bis zu einem bestimmten Punkt aus Datei lesen Java Basics - Anfänger-Themen 2
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
E Input/Output Property-Datei aus einer Zip lesen in in einer anderen Zip-Datei ist Java Basics - Anfänger-Themen 3
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
J Aus Datei lesen und ausgeben Java Basics - Anfänger-Themen 4
N Bestimmte Inhalte aus Datei lesen Java Basics - Anfänger-Themen 11
G Datei zeilenweise lesen Java Basics - Anfänger-Themen 19
M Wie sämtliche Schlüssel und Attibutwerte aus einer Propertie Datei lesen? Java Basics - Anfänger-Themen 3
S Compiler-Fehler jOpenDocument Kompelierfehler - ODS Datei lesen Java Basics - Anfänger-Themen 2
T BufferReader soll datei mehrmals lesen Java Basics - Anfänger-Themen 13
S Datei aus JAR lesen. Java Basics - Anfänger-Themen 9
Z Problem beim Lesen und Schreiben einer Datei Java Basics - Anfänger-Themen 10
M Input/Output Viele short aus Datei lesen und von Little Endian zu Big Endian umwandeln Java Basics - Anfänger-Themen 12
J Können mehere Threads parallel eine Datei lesen? Java Basics - Anfänger-Themen 4
A Eine Datei Lesen und bestimmte Position überschreiben Java Basics - Anfänger-Themen 2
S Input/Output aus Datei lesen Java Basics - Anfänger-Themen 6
A Datei relativ zur Lage des jar-files lesen Java Basics - Anfänger-Themen 16
Gossi Input/Output .csv Datei wird beim Lesen bearbeitet? Java Basics - Anfänger-Themen 8
C Wörter aus einer txt datei lesen Java Basics - Anfänger-Themen 19
E txt Datei schreiben und lesen Java Basics - Anfänger-Themen 9
T Datei über das Netz lesen Java Basics - Anfänger-Themen 2
W Aus Datei lesen Java Basics - Anfänger-Themen 15
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
F Kann RandomAccessFile Zip Datei lesen? Java Basics - Anfänger-Themen 14
M Aus CSV-Datei lesen und anzeigen (bitte schnell um Antwort) Java Basics - Anfänger-Themen 6
J UTF8 txt-Datei lesen Java Basics - Anfänger-Themen 13
A Datei Lesen und Schreiben in gleichen Klasse Java Basics - Anfänger-Themen 3
Haubitze_Broese aus einer Datei lesen? Java Basics - Anfänger-Themen 6
S Array Daten in Binär Datei schreiben/lesen Java Basics - Anfänger-Themen 11
K aus Datei lesen Java Basics - Anfänger-Themen 3
S Datei lesen Java Basics - Anfänger-Themen 27
M line.separator: Problem beim Lesen einer Datei Java Basics - Anfänger-Themen 11
K Text aus einem Datei lesen , und im JTextArea ausgeben. Java Basics - Anfänger-Themen 3
Ollek Bestimmte Zeilen aus einer HTML Datei lesen Java Basics - Anfänger-Themen 8
calzone FileReader, lesen ohne die Datei zu überschreiben? Java Basics - Anfänger-Themen 3
J Problem mit Datei lesen und schreiben Java Basics - Anfänger-Themen 8
M Datei Lesen Und Schreiben! -.- Java Basics - Anfänger-Themen 7
fbn Datei als Ganzes lesen (nicht zeilenweise) Java Basics - Anfänger-Themen 8
M Probleme mit dem Lesen einer m3u-Datei Java Basics - Anfänger-Themen 8
H Datei zeilenweise rückwärts lesen Java Basics - Anfänger-Themen 9
M Delphi-Record mit Java aus Datei lesen Java Basics - Anfänger-Themen 11
R Sequentielle Datei lesen und schreiben Java Basics - Anfänger-Themen 5
G FileInputStream--> Zahlen aus Datei lesen Java Basics - Anfänger-Themen 7
S Aus Datei lesen und im Array speichern Java Basics - Anfänger-Themen 2
J Datei lesen und in Array speichern Java Basics - Anfänger-Themen 5
P Teile aus Datei lesen und zus mit Strings in Datei speichern Java Basics - Anfänger-Themen 4
D excel datei Spalten lesen? Java Basics - Anfänger-Themen 7
J Kommandos aus Datei lesen Java Basics - Anfänger-Themen 13
J Datei zeilenweise lesen. Java Basics - Anfänger-Themen 4
S Werte aus Datei lesen und in Variable abspeichern Java Basics - Anfänger-Themen 4
alexpetri Datei in String lesen Java Basics - Anfänger-Themen 6
K XPath werter aus XML-Datei lesen Java Basics - Anfänger-Themen 6
M Datei lesen und Char für Char wiedergeben Java Basics - Anfänger-Themen 28
K Datei öffnen, lesen, bearbeiten, in neuer datei speichern Java Basics - Anfänger-Themen 12
T Zahlen aus einer Datei lesen Java Basics - Anfänger-Themen 3
B Wie eine bestimmte Zeile einer Txt-Datei lesen ? Java Basics - Anfänger-Themen 5
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
T Exception-Handling beim Lesen einer XML-Datei mit XMLDecoder Java Basics - Anfänger-Themen 4
R Objekt aus Datei lesen Java Basics - Anfänger-Themen 5
J Class datei lesen Java Basics - Anfänger-Themen 2
T gezieltes lesen/schreiben in datei Java Basics - Anfänger-Themen 9
D ein File(Datei) lesen und diesen zu einem Hashmap hinfügen? Java Basics - Anfänger-Themen 5
A Datei lesen Java Basics - Anfänger-Themen 12
L Zeile aus Datei lesen Java Basics - Anfänger-Themen 5
S Datei lesen und speichern Java Basics - Anfänger-Themen 8
reibi Datei von hinten lesen Java Basics - Anfänger-Themen 11
G Mehrere Zahlen aus Datei lesen Java Basics - Anfänger-Themen 3
C Komische Zeichen beim Lesen aus einer .reg-Datei Java Basics - Anfänger-Themen 2
H Datei lesen und an bestimmter Stelle schreiben Java Basics - Anfänger-Themen 4
F Aus Byte Datei lesen Java Basics - Anfänger-Themen 4
B String aus Datei lesen + Länge berechnen Java Basics - Anfänger-Themen 2
L Strings von Datei lesen und in TextArea schieben Java Basics - Anfänger-Themen 3
M Zufällige Zeile aus einer Datei lesen Java Basics - Anfänger-Themen 2
J Lesen einer Datei in einen String oder Char? Java Basics - Anfänger-Themen 3
S Datei lesen und in array rein Java Basics - Anfänger-Themen 10
tobiasbeil Von Datei byte für byte lesen und in ein Array einfügen. Java Basics - Anfänger-Themen 11
J Datei-Details /-Infos wie Kommentare, Autor lesen/schreiben Java Basics - Anfänger-Themen 2
F Datei lesen Java Basics - Anfänger-Themen 12
S Mit Scanner eine txt Datei lesen Java Basics - Anfänger-Themen 2
A Variablen in eine Datei speichern und lesen Java Basics - Anfänger-Themen 2
V Beim lesen aus einer Datei bekomme ich fehlerhafte Strings. Java Basics - Anfänger-Themen 2
G aus datei lesen und in liste einfügen Java Basics - Anfänger-Themen 5
B Datei lesen und schreiben Java Basics - Anfänger-Themen 2
R Zeilen aus datei lesen + doppelt gespeichert? Java Basics - Anfänger-Themen 3
B Aus Datei Lesen -> Compiler fehler Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben