# getClass().getResourceAsStream als File ?



## vip3r-de (15. Juni 2007)

Hallo,

ich muss eine Datei die nicht in einem festen Ordner (je nachdem wo das Programm installiert wird), liegt als File übergeben. Sinn und Unsinn des ganzen, ist es eine XML Datei einzulesen und bestimmte Werte in ein Array zu schreiben, dafür brauch ich aber wie schon gesagt ein File. Die xml und die klasse liegt hier: model/xml/*.*
Mit der Funktion
*getClass().getResourceAsStream *
bekomme ich aber nur einen InputStream übergeben, aber genau sowas brauch ich ebend nur als File.
Gibt es eine möglichkeit den Stream -> File zu konvertieren ?
Habe das ganze auchmal als URL versucht, mit :
*getClass().getResource *
aber das funktioniert ebensowenig. 

hat jmd eine Idee ?

mfg


----------



## xonauga (19. November 2007)

hi,
hast du eine lösung für das problem gefunden. wäre ich sehr interessiert dran.

mfg
xonauga


----------



## Oliver Gierke (19. November 2007)

Wie wärs damit:

```
URL url = this.getClass().getResource("/foo/bar.txt");
String absFile = url.getFile(); // gibt den absoluten Pfad zu der Datei zurück
```

REINHAUN!


----------



## xonauga (19. November 2007)

hallo oliver,

danke für die antwort. das habe ich schon probiert. aber leider kommt immer eine filenotfoundexception. java.io.FileNotFoundException: file:\C:\a.jar!\res\test.txt
(Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)

welche syntax wird denn benötigt, bzw. welcher teil der obigen zeichenkette?  

irgendwie komme ich damit nicht weiter. ich möchte gerne in einem jararchiv mehrere ttf-dateien im res-ordner ablegen und wenn nötig laden, bzw. einer methode übergeben, die ein file-Objekt als parameter erwartet.

hast du vielleicht noch einen lösungsansatz?

gruß
xonauga


----------



## Matze (19. November 2007)

Du könntest auch wenn du gar nicht mehr weiter kommst, dass suchen der Datei dem User überlassen indem du ihn einfach in mit einem JFileChooser die Datei suchen lässt


----------



## Kulabac (19. November 2007)

xonauga hat gesagt.:


> hallo oliver,
> 
> danke für die antwort. das habe ich schon probiert. aber leider kommt immer eine filenotfoundexception. java.io.FileNotFoundException: file:\C:\a.jar!\res\test.txt
> (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)
> ...



Bisher hat's bei mir leider auch nur mit der getResourceAsStream-Methode geklappt, Dateien aus Jars auszulesen. getResource hat leider bei mir auch noch nie funktioniert. Aber ich hab mich da auch noch nie wirklich mit beschäftigt, da ich gut mit den Streams weiterarbeiten konnte.


----------



## xonauga (19. November 2007)

hi,
danke für den vorschlag, aber damit möchte ich nicht den user belasten. es geht um eine java bean, deren aufgabe es ist, aus oracle forms heraus einen generierten pdf-bericht zum lokalen drucker zu senden. das sollte alles im jar geregelt werden. gibts denn da keine möglichkeit?

ich kann natürlich auch direkt den windows fonts ordner ansprechen. es nervt mich einfach warum das nicht aus dem res-ordner heraus funktioniert.

gruß
gunnar


----------



## Oliver Gierke (19. November 2007)

Womit verarbeitest du die XML Datei denn? Die meisten XML Parser können mit InputStreams arbeiten, womit getResourceAsStream() ausreichen würde.

Gruß
Ollie

BTW. die info, dass das zu ladende File in einem JAR liegt, hast du uns günstigerweise vorenthalten


----------



## xonauga (19. November 2007)

hallo,

wie kommst du auf xml ich muss keine xml datei verarbeiten. ich verwende eine funktion aus den pdfbox klassen um fonts zu laden.

File fontFile = new File(url.getFile()); // ttf datei aus dem res-ordner
PDTrueTypeFont.loadTTF(document, fontFile);

mit inputstreams komme ich da nicht weiter. ich warte gespannt ab, ob noch ein gute lösung kommt. aber vielen dank für die rege beteiligung - super forum hier.


----------



## Oliver Gierke (19. November 2007)

Nicht du... der ursprüngliche Fragesteller. Es wird immer etwas konfus, wenn zwei Problemsteller in einem Thread auftauchen


----------



## Luggi (19. Februar 2011)

Hallo, ich habe genau das selbe Problem.
Hat denn schon einer eine Lösung?

Mein Poroblem ist:

Shapefile sf = new Shapefile(file);
sf.loadShapes(file)

ich kann dem Shapefile Objekt nur ein File übergeben. Keine Stream etc.
Und beim Ausführen der jar krieg ich die FileNotFound Exception

LG Andreas


----------



## Thomas Darimont (19. Februar 2011)

Hallo,

schau mal hier:

```
package de.tutorials;

import java.io.File;
import java.net.URL;

public class GetResourceExample {
	public static void main(String[] args) throws Exception {
		URL url = GetResourceExample.class.getClass().getResource("/META-INF/persistence.xml");
		System.out.println(url);

		File file = new File(url.toURI());
		System.out.println(file);

	}
}
```

Gruß Tom


----------



## Luggi (20. Februar 2011)

Hallo Tom,
danke für deinen Versuch aber sobald ich die kompillierte Jar-Datei starte erhalte ich folgene exception:


```
java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(Unknown Source)
        at fast.gui.Action.windowOpened(Action.java:272)
        at java.awt.Window.processWindowEvent(Unknown Source)
        at javax.swing.JFrame.processWindowEvent(Unknown Source)
        at java.awt.Window.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(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.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)
```

LG Andreas


----------



## Thomas Darimont (20. Februar 2011)

Hallo,

wie schaut denn die URI aus die du bekommst? Liegt die Datei neben deiner Anwendung oder innerhalb eines jar's?

Gruß Tom


----------



## Luggi (20. Februar 2011)

die Datei liegt innerhalb der Jar File. Andernfalls hätte ich ja kein wirkliches Problem Problem.
Wenn ich das Programm aus dem editor (eclipse, netbeans) starte gibt es keinerlei Probleme. Nur beim starten der compillierten jar.

Was ich machen könnte wäre den Stream aus der getResource() zu holen und dann eine temopräre Datei auf die Festplatte schreiben und mit dieser Datei arbeiten.
Diese Lösung finde ich aber etwas "bescheiden".

LG Andreas

edit:

Das ist meine URI

```
jar:file:/C:/f.jar!/fast/res/world.dbf
```


----------

