1. Java Klasse für CSV auslesen gesucht 2. Datei-öffnen Problem
-
Guten Tag zusammen,
<1.> ich suche eine schöne Klassen(bibliothek) zum generellen auslesen einer CSV Datei (so etwa):
"Rastereinstellung",6 "Bildlage","C:\\Demo\\game.jpg" "Autor","Kevin O."
<2.> nächstes Anfängerproblem: Die Datei "C:\\Demo\\game.jpg" existiert zwar, jedoch liefert mein Code beim Zugriff immer eine NULL zurück:
File file = new File("c:\\Demo\\game.jpg"); System.out.println("Datei existiert..."+file.canRead());
Vielen Dank für Eure Hilfe. Grüße, Kevin!
-
lovepulse schrieb:
<1.> ich suche eine schöne Klassen(bibliothek) zum generellen auslesen einer CSV
Was soll diese Bibliothek den großartiges bieten? Ein einfaches String.split(",") liefert dir schon die einzelnen Teile als Array. Das weiterverarbeiten wirst du dann ja eh selbst übernehmen müssen.
lovepulse schrieb:
<2.> nächstes Anfängerproblem: Die Datei "C:\\Demo\\game.jpg" existiert zwar, jedoch liefert mein Code beim Zugriff immer eine NULL zurück
Bin zwar grad nicht sicher ob das der Grund ist, aber ich bin auch unter Windows immer besser damit gefahren / zu benutzen. Also, das wäre dann "C:/Demo/game.jpg".
-
zu 1. seh ich ähnlich tobiking2.
zu 2. hab n wenig in der api geschmökert. du kannst nirgendwo ne NULL bekommen. das einzige ist ne nullpointerexception, wenn dein konstruktorparameter null ist.
daher gehe ich davon aus, dass du versuchst "c:\\Demo\\game.jpg" per varible zu übergeben. wenn dem so ist würd ich mir die variable vor übergabe an den kostruktor prüfen(schätze die steht auf NULL).
Bin zwar grad nicht sicher ob das der Grund ist, aber ich bin auch unter Windows immer besser damit gefahren / zu benutzen. Also, das wäre dann "C:/Demo/game.jpg".
selbst wenn der path unverständlich ist wird n false ausgegeben.
-
import java.util.ArrayList; import java.util.List; /** * Parse comma-separated values (CSV), a common Windows file format. Sample * input: "LU",86.25,"11/4/1998","2:19PM",+4.0625 * <p> * Inner logic adapted from a C++ original that was Copyright (C) 1999 Lucent * Technologies Excerpted from 'The Practice of Programming' by Brian W. * Kernighan and Rob Pike. * <p> * Included by permission of the http://tpop.awl.com/ web site, which says: "You * may use this code for any purpose, as long as you leave the copyright notice * and book citation attached." I have done so. * * @author Brian W. Kernighan and Rob Pike (C++ original) * @author Ian F. Darwin (translation into Java and removal of I/O) * @author Ben Ballard (rewrote advQuoted to handle '""' and for readability) */ public class CSV { public static final char DEFAULT_SEP = ','; public static final char DEFAULT_QUOTE = '"'; /** * the separator char for this parser */ protected char fieldSep; /** * the quote char for this parser */ protected char fieldQuote; public CSV() { this(DEFAULT_SEP,DEFAULT_QUOTE); } /** * Construct a CSV parser with a given separator. * * @param sep The single char for the separator (not a list of separator characters) * @param quote The single char for quoted values (not a list of characters) */ public CSV(char sep, char quote) { fieldSep = sep; fieldQuote = quote; } /** * parse: break the input String into fields * * @return java.util.Iterator containing each field from the original as a * String, in order. */ public List<String> parse(String line) { StringBuffer sb = new StringBuffer(); List<String> list = new ArrayList<String>(); int i = 0; if (line.length() == 0) { list.add(line); return list; } do { sb.setLength(0); if (i < line.length() && line.charAt(i) == fieldQuote) i = advQuoted(line, sb, ++i); // skip quote else i = advPlain(line, sb, i); list.add(sb.toString()); i++; } while (i < line.length()); //Last element is empty if(line.charAt(line.length()-1) == fieldSep) list.add(""); return list; } /** advQuoted: quoted field; return index of next separator */ protected int advQuoted(String s, StringBuffer sb, int i) { int j; int len = s.length(); for (j = i; j < len; j++) { if (s.charAt(j) == fieldQuote && j + 1 < len) { if (s.charAt(j + 1) == fieldQuote) { j++; // skip escape char } else if (s.charAt(j + 1) == fieldSep) { // next delimeter j++; // skip end quotes break; } } else if (s.charAt(j) == fieldQuote && j + 1 == len) { // end quotes at // end of line break; // done } sb.append(s.charAt(j)); // regular character. } return j; } /** advPlain: unquoted field; return index of next separator */ protected int advPlain(String s, StringBuffer sb, int i) { int j; j = s.indexOf(fieldSep, i); // look for separator if (j == -1) { // none found sb.append(s.substring(i)); return s.length(); } else { sb.append(s.substring(i, j)); return j; } } }
mfg
xXx
-
<2.> nächstes Anfängerproblem: Die Datei "C:\\Demo\\game.jpg" existiert zwar, jedoch liefert mein Code beim Zugriff immer eine NULL zurück:
Du musst die Datei auch erzeugen um sie benutzen zu können:
File f = new File("C:" + File.separator + "Demo" + File.separator + "test.jpg"); // f ist nur eine Objekt was eine Datei abstrakt repräsentiert try { if(f.createNewFile()) { // jetzt wird die Datei die durch f repräsentiert wird, physikalisch erzeugt String path = f.getAbsolutePath(); System.out.println(path + " wurde erfolgreich erzeugt."); if(f.canWrite()) System.out.println(path + " kann beschrieben werden."); if(f.canRead()) System.out.println(path + " kann gelesen werden."); if(f.delete()) System.out.println(path + " wurde erfolgreich gelöscht."); } } catch(IOException e) { e.printStackTrace(); }
-
Ravendark schrieb:
<2.> nächstes Anfängerproblem: Die Datei "C:\\Demo\\game.jpg" existiert zwar, jedoch liefert mein Code beim Zugriff immer eine NULL zurück:
Du musst die Datei auch erzeugen um sie benutzen zu können:
File f = new File("C:" + File.separator + "Demo" + File.separator + "test.jpg"); // f ist nur eine Objekt was eine Datei abstrakt repräsentiert try { if(f.createNewFile()) { // jetzt wird die Datei die durch f repräsentiert wird, physikalisch erzeugt String path = f.getAbsolutePath(); System.out.println(path + " wurde erfolgreich erzeugt."); if(f.canWrite()) System.out.println(path + " kann beschrieben werden."); if(f.canRead()) System.out.println(path + " kann gelesen werden."); if(f.delete()) System.out.println(path + " wurde erfolgreich gelöscht."); } } catch(IOException e) { e.printStackTrace(); }
da laut lovepulse die datei schon existiert, muss sie nich erzeugt werden.
f.createNewFile liefert false zurück, wenn die datei schon existiert und nicht neu angelegt wird. also wird der if-block nicht betreten und s gibt keine ausgabe.
-
da laut lovepulse die datei schon existiert, muss sie nich erzeugt werden.
Sorry, hab ich glatt überlesen...ja dann ist mein Code wenig hilfreich
@lovepulse:
Wenn du den Pfad, wie 0815 es schon erwähnte, per Variable an den File-Konstruktor übergibst, prüfe danach ob die Datei korrekt initialisiert ist.File f = new File( /* dein Pfad */ ); if(f.isFile()) { // mit dem File-Objekt weiterarbeiten } else { System.out.println(f.getAbsolutePath() + " ist keine korrekt initialisierte Datei."); }
EDIT:
Wenn die Variable die den Pfad beinhaltet, null ist, dann bekommst du schon beim erzeugen des File-Objektes eine NullPointerException.
Aus der JavaDoc zum Thema File-Konstruktor:Throws:
NullPointerException - If the pathname argument is null
-
ist auch nicht nötig.
selbst:File f = new File("xyz"); System.out.println("Datei existiert..."+file.canRead());
gibt nur ein false zurück; kein NULL
die einzige möglichkeit bei einem so gearten code ne nullptrexeption zu bekommen ist:
String s = null; File f = new File(s); System.out.println("Datei existiert..."+f.canRead());
alles ander wie datei nich da / illegaler path / keine leserechte gibt n false zurück.
-
0815 schrieb:
ist auch nicht nötig.
selbst:File f = new File("xyz"); System.out.println("Datei existiert..."+file.canRead());
gibt nur ein false zurück; kein NULL
die einzige möglichkeit bei einem so gearten code ne nullptrexeption zu bekommen ist:
String s = null; File f = new File(s); System.out.println("Datei existiert..."+f.canRead());
alles ander wie datei nich da / illegaler path / keine leserechte gibt n false zurück.
Dann ist seine Variable die den Pfad beinhaltet null...
-
dein edit mit der exception kam nach meinem post. und ausserdem stehts schon im 3ten post zu dem thema.
-
und ausserdem stehts schon im 3ten post zu dem thema.
Ich wollte es nur noch mal bekräftigen