Ich meinem Code lese ich ein Excel File ein. Es funktioniert auch soweit. Wenn ich aber jetzt ein .Jar File erzeuge funktioniert mit dem einlesen nicht.
Problem ist bekannt. ich habe ein res Ordner erzeugt und auch in build path eingefügt.
Nun komme ich nicht weiter. Wie kann ich jetzt auf meinem Excel Datei, welches sich in res Ordner befindet zugreifen?
Excel File befindet sich unter Workspace/DC/res/excel1.xlsx
wenn ich es über eclipse ausführe funktioniert es
sobald ich runnable Jar file erzeuge funktioniert es nicht.
java.lang.NullPointerException: in is null
at java.util.zip.ZipInputStream.<init>(Unknown Source)
at java.util.zip.ZipInputStream.<init>(Unknown Source)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:88)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:273)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:266)
at DCSQ.Ex_read_write.exceloy(Ex_read_write.java:124)
at DCSQ.DCSQ_new_grid.checked_box(DCSQ_new_grid.java:379)
at DCSQ.DCSQ_new_grid.access$1(DCSQ_new_grid.java:370)
at DCSQ.DCSQ_new_grid$listen.actionPerformed(DCSQ_new_grid.java:359)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ich möchte mein Excel file weiterhin lesen können.
Dies hatte ich auch mit mehrere Möglichkeiten getestet.
FileInputStream file = new FileInputStream("/excel.xlsx"); //Eclipe und Jar funktioniert nicht
FileInputStream file = new FileInputStream("excel.xlsx"); //Eclipse und Jar funktioniert nicht
FileInputStream file = new FileInputStream("res/excel.xlsx"); //Eclipse funktioniert aber in Jar nicht
Du scheinst aus irgendeinem Grund die Notwendigkeit zu haben dass dein ExcelFile im Jar-File enthalten ist, warum auch immer. Die Beispiele aus deinem letzten Post würden dann funktionieren wenn du beim Ausführen deines Jar-Files im gleichen Directory entweder einen Ordner "res" mit dem ExcelFile darin bzw. direkt im gleichen Ordner das ExcelFile hättest, nicht im Jar-File !
Und dass du bei dem folgenden eine Null-Pointer Exception kriegst ist ja klar:
Wenn du einen relativen Pfadnamen angibst dann ist der Pfad bei getRessourceAsStream(...) relativ zum package der aufrufenden Klasse. Wenn du einen absoluten Pfad angibst (sowas wie "/res/excelfile.xls") dann ist die Angabe relativ zu den Pfaden in CLASSPATH zu verstehen, d.h. diese muss passend gesetzt werden.
Also:
wenn ich den absoluten Pfad eingebe"C:/xxx/xxx/res/excel.xlxs" dann funktioniert das. Ich will aber später von meinem Jar File .exe File machen und es an verschiedene Rechner benutzen. Deswegen würde ich ungern mit absolut Pfad arbeiten.
Vorhaben:
Excel sheet welches ich in meinem Programm anbinden möchte hat mehrere seiten und viele Datenpunkte mit Lücken.
Grafiken etc.
Mein Excel sheet wird gelesen und die Lücken werden von meinem Code je nach Bedingung welches ich auswähle gefüllt.
und als neues Excel sheet gespeichert.
Das funktioniert auch wunderbar über Eclipse.
Nur Wenn ich JAR file erzeuge habe ich das Problem mit dem excel sheet
Ich möchte egal an welchem rechner ich bin. Wenn ich mein Exe file starte dass mein Excel sheet welches ich einlese auch einlesbar(verfügbar) ist.
Und dein Excel sheet ist also sowas wie ein template oder so ??
Wenn Du den Pfad als Argument übergibst, dann kannst Du auch wieder relative Pfade nutzen.
Wenn Du das Ding in dein JAR file mit eincompilierst (wie auch immer das geht ...) dann brauchst du gar keine Pfade mehr. Egal ob das Ding vorher mal absolut oder relativ war ... der Pfad ist ja dann sozusagen ".", Du würdest noch nicht einmal die excel datei dazupacken müssen.
Die nächste Möglickeit: (absolute Pfade dienen manchmal nur der Diagnose)
Da es mit absoluten Pfaden geht, wette ich jetzt, daß dein eclipse - project nicht im gleichen Verzeichnis sucht (oder anfängt zu suchen) wie deine .exe . Sprich: der relative Pfad ist einfach nur falsch. Lege die Datei an die richtige Stelle und es wird gehen.
Aber Du kannst mir vielleicht eines verraten: Wie entlockst Du eclipse ein jar file ?