• 17.05.2024, 23:22
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 14:08

Hallo hallo AC,

ich versuche in Eclipse eine Datei einzulesen (*.xml), die nicht im Eclipse Workspace (gemeint ist das Directory) liegt, sondern irgendwo ganz anders - bsp: Wokspace ist D:\Projects dann liegt das file z.B: in N:\stuff

Dazu benutze mehrere Funktionen.
Zuerst lasse ich mir von einem FileDialoge den Pfad zur Datei, sowie Dateinamen und Endung anzeigen (das ist OS abhängig).
- der String heißt der diese Infor enthält, heißt Datapath

Dann lasse ich mir über

Quellcode

1
new FileInputStream (Datapath)

einen Stream erstellen, der das ganze hoffentlich öffnet (Zeile läuft wenigstens).

Dann lasse ich mir das ganze über eine Funktion, die einen InputStream verlangt, in ein IFile - file - schreiben:

Quellcode

1
2
3
4
5
6
7
8
     public IFile GetIFile (InputStream myStream){      
            try{
                  file.create(myStream, true, null);
                  return file;
            }catch (CoreException CE){
                  return null;
            }//catch (CoreException CE)
      }//IFile get_IFile


Und dort liegt irgendwo der Hund begraben - es kommt nämlich hier zum Absturz.

Weis jemand, wo mein Denkfehler ist, bzw wo ich etwas mache, was ich nicht darf?
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 14:54

da fehlen mir noch ein paar angaben.

zb: IFile ist ein Interface.
Mit welcher konkreten Klasse hast du file in deiner Methode belegt?
Ist file überhaupt belegt?

andere fehlerquelle:
wenn du den FileInputStream öffnest, fängst du die FileNotFoundException ab, und klappt das an der Stelle?
Pfade usw. können schonmal tricky sein.

Außerdem solltest du die Exceptions in der Funktion ausgeben lassen, nicht einfach ignorieren.

Absturz heißt übrigens was? Was zeigt der Stacktrace dabei?
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 15:19

Ok. der Reihe nach:

Zitat

Mit welcher konkreten Klasse hast du file in deiner Methode belegt?

file ist eine Variable:

Quellcode

1
protected IFile file;


Zitat

Ist file überhaupt belegt?

- Die soll dadurch belegt werden. Wird nur voher durch ein

Quellcode

1
myDatahandling.SetFile(null);
initialisiert.


Zitat

Wenn du den FileInputStream öffnest, fängst du die FileNotFoundException ab, und klappt das an der Stelle?
Pfade usw. können schonmal tricky sein.

- Wird abgefangen und ich lasse den Stack auch printen. Nur ich weis nicht, wo er dann stehen sollte;) (bzw ich sehe ihn nicht.)

Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 15:43

Zitat von »Katzenfreund«

Ok. der Reihe nach:
file ist eine Variable:

Quellcode

1
protected IFile file;

danach ist file "null".
Wenn man nun eine Methode von file aufruft bekommt man einen NullPointerException.

Da wäre es nur logisch das es nicht funktioniert.

IFile ist, wie gesagt, auch nur ein Interface. Das kann erstmal garnichts sondern sagt nur welche Methoden zur Verfügung steht.
Aber man muss erstmal eine Klasse haben die die Methoden auch implementiert.

Ich weiß zuwenig über Eclipse-Entwicklung als das ich wüßte ob sowas vielleicht auch durch Dependency Injection gelöst ist. Kann ich mir an der Stelle aber gut vorstellen.

Zitat

- Die soll dadurch belegt werden. Wird nur voher durch ein

Quellcode

1
myDatahandling.SetFile(null);
initialisiert.

was ist denn myDatahandling für eine Klasse?
Irgendwas von Eclipse?

Zitat

- Wird abgefangen und ich lasse den Stack auch printen. Nur ich weis nicht, wo er dann stehen sollte;) (bzw ich sehe ihn nicht.)

Hm, normalerweise ruft man den Eclipse Kram ja aus Eclipse raus auf.
Dann erscheint der Stack im Console-View.

Das Eclipse eigene Log findet man auch im Workspace unter ".metadata/.log"

Sonst wäre es auch ganz sinnvoll ein Logging einzusetzen, commons-logging + log4j ist zu recht beliebt, wobei ich nicht weiß ob Eclipse hier einen eigenen Weg geht.

Lohnt sich aber ein funktionierendes Logging zu haben.

Wobei hier auch Debugging sinnvoll wäre.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 16:55

Zitat von »crushcoder«


danach ist file "null".
Wenn man nun eine Methode von file aufruft bekommt man einen NullPointerException.

Da wäre es nur logisch das es nicht funktioniert.

Ähh seit wann ist eine Variable Null wenn ich sie deklariere?

Außerdem wird ja danach versucht, der Stream zu zuweisen.;)
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 17:10

ok nicht null. Aber solang du nichts zuweist ist die variable unitialisiert.
und falls du ein "file == null" prüfst, solang file unitialisiert ist, ergibt dies "true".

an welcher stelle versuchst du denn den stream zuzuweisen?
mit file.create?
create kann nicht ausgeführt werden weil file unitialisiert ist.

oder du hast die codestelle nicht gepostet in der file initialisiert wird.

edit: ohne stacktrace ist das sowieso nur raterei.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 17:28

wieso? Ich gebe doch bei file.create den Stream an, der gefälligst in das file soll - ist doch also ein setzen des Inhalts - Initialisierung, oder?

Wenn nein, wie wäre eine?
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 17:46

Initialisierung wäre ein "file = new Irgendwas()";

oder ein "file = andereVariable.methodeDieIFileTypZurückgibt()";

oder ein "file = FactoryKlasse.statischeMethodeDieIFileTypZurückgibt()";

Per Dependency Injection wäre auch eine Möglichkeit.
Aber irgendwo muss immer ein "file =" stehen.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 17:48

Hmm und so wie ich das mache, also erst null schreiben und dann später Inhalt setzen geht es nicht?

Ach ja: file ist halt vom Typ IFile. Davon kann ich leider nicht einfach mit new IFile(); eine Instanz ziehen. Daher der Versuch via Null und später mit .create..

Aber ihr scheint recht zu haben, da auch file.exists() immer ein false liefert.... bleibt: Wie muss ich es richtig machen?
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Samstag, 5. April 2008, 21:52

Da bin ich mit meinem Latein am Ende.

Aber mir scheint das:
http://wiki.eclipse.org/FAQ_How_do_I_ope…he_workspace%3F
ein paar Hinweise zu geben.

Das macht ja ungefähr das was du willst, nur wird dabei noch ein Editor geöffnet. Du machst dann mit dem File was du willst.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Sonntag, 6. April 2008, 13:51

Zitat von »crushcoder«

FAQ_How_do_I_open_an_editor_on_a_file_outside_the_workspace%3F

Ähhm nein.
Man erstellt dort kein IFile sondern ein IFileStore.
Und mir ist auch nicht ganz klar, was bei denen names ist.

Edit: Hier übrigens mal das StackTrace:
Error Opening the Editor:

Quellcode

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
java.lang.InstantiationException: bausteine.GUI
      at java.lang.Class.newInstance0(Unknown Source)
      at java.lang.Class.newInstance(Unknown Source)
      at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:170)
      at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:788)
      at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
      at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
      at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:252)
      at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
      at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:248)
      at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:231)
      at org.eclipse.ui.internal.EditorManager.createPart(EditorManager.java:841)
      at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:606)
      at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:426)
      at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
      at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:299)
      at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:179)
      at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:268)
      at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
      at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:400)
      at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
      at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1209)
      at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1604)
      at org.eclipse.ui.internal.PartStack.add(PartStack.java:499)
      at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103)
      at org.eclipse.ui.internal.PartStack.add(PartStack.java:485)
      at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112)
      at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63)
      at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:217)
      at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:207)
      at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:774)
      at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:673)
      at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:634)
      at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2737)
      at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2651)
      at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:2643)
      at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2595)
      at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
      at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2590)
      at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2574)
      at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2565)
      at bausteine.GUI.CreateMainEditor(GUI.java:52)
      at bausteine.Activator.<init>(Activator.java:60)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at java.lang.Class.newInstance0(Unknown Source)
      at java.lang.Class.newInstance(Unknown Source)
      at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:170)
      at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:788)
      at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
      at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
      at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:252)
      at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
      at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:248)
      at org.eclipse.ui.internal.PluginAction.createDelegate(PluginAction.java:122)
      at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:228)
      at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:229)
      at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:546)
      at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
      at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
      at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
      at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
      at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
      at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
      at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
      at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
      at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
      at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
      at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
      at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
      at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
      at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
      at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
      at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
      at org.eclipse.equinox.launcher.Main.main(Main.java:1148)
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Sonntag, 6. April 2008, 14:27

gute frage was names ist.
wenn ich mir die api von IFileStore ansehe müsste das eher name sein, also das was man vom FileDialog zurück bekommt.

ich denke die haben den schritt vergessen indem name in filterpath und names umgewandelt wird.
vielleicht braucht der filestore bei getChild nur den namen der datei, während filepath halt der pfad ist.

vielleicht fehlt auch der teil wo aus dem filestore mit childNames() das array geholt wird.

anyway, ich meinte sowieso das untere beispiel, da kommt ein IFile raus.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Sonntag, 6. April 2008, 20:34

Ja danke. Geht soweit. Nur nachdem alles erledigt ist gibt es eine saftige Fehlermeldung und in der Console steht:

Zitat

Unable to load cache.


Was mache ich falsch bzw vergesse ich etwas?
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Mittwoch, 9. April 2008, 23:40

Sorry, für den Doppelpost, aber ich brauch da nochmal einen Tipp:

Ich bekomme ein
"Unable to load cache." Als Fehlermeldung (Console)
das ganze findet bei dieser Zeile statt:

Quellcode

1
XMLStuff myXML = new XMLStuff(myDatahandling.GetFileStream());


Unzwar, wenn der InputStream zurück geschick wird (GetFileStream sieht so aus:)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
public InputStream GetFileStream (){
            if(file!=null){
                  try{            
                        return file.getContents();
                  }catch (CoreException CE){
                        CE.printStackTrace();
                        return null;
                  }//catch (FileNotFoundException FNFE
            }//if
            return null;
      }//public FileReder GetFile ()

Das IFile existiert und ist in Ordnung;)
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]

Re: Eclipse Datei öffnen - als IFile haben

Donnerstag, 10. April 2008, 13:25

trenn bitte mal den aufruf von GetFileStream und das initialieren von XMLStuff.

Und benenn das gleich mal in getFileStream um, insgesamt wäre es übrigens angebracht sich an die code conventionen von java zu halten. Ist um einiges übersichtlicher für andere.

Dann weiß man woher das problem kommt, wobei es ja nach dem Konstruktor von XMLStuff ausschaut.

Aber woher kommt XMLStuff? Konnte ich über google nicht finden.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

Re: Eclipse Datei öffnen - als IFile haben

Donnerstag, 10. April 2008, 23:06

Zitat von »crushcoder«


Und benenn das gleich mal in getFileStream um, insgesamt wäre es übrigens angebracht sich an die code conventionen von java zu halten. Ist um einiges übersichtlicher für andere.

Dann hätte mir jemand diese Konventionen verraten müssen;)

Zitat von »crushcoder«


Aber woher kommt XMLStuff? Konnte ich über google nicht finden.

XMLStuff ist eine von mir geschriebene Klasse, die letztlich auf einer Klasse namens XMLUtil des TPTP basiert. (eigentlich implementiert sie diese nur, sie erbt nämlich nicht.)
Suche Bücher von Tanenbaum und Galileo (auch Video-Training) - bitte KM! [img] http://www.aqua-computer-berlin.de/logo.png [/img]