externe Datei verteilen und aufrufen

jokerbell

Grünschnabel
Hallo,

ich habe ein kleines Problem mit einer externen Datei. Der Sachverhalt ist folgender:
Ich habe eine RTF-Datei (test.rtf), die in meinem Workspace abgespeichert ist ( c:\my_workspace\my_project\src\rtf\test.rtf )

Diese Datei soll mit in meinem JAR verteilt werden, damit der Benutzer immer meine Version des RTFs benutzt und somit keine Änderung möglich ist.
In meinem Programm benötige ich den Dateipfad der RTF Datei.

Ist es also irgendwie möglich, die RTF Datei mit dem JAR zu verteilen und den Dateipfad des RTFs in dem jar (also zur Laufzeit) rauszufinden?

Danke
jokerbell
 
Ja klar geht das.

Leg am besten im Ordner rtf eine neuen Klasse an mit einer statischen Methode getRTFFile:
Java:
public final class RTFUtil {
  public static File getRTFFile(){
    URL rtfURL = RTFUtil.class.getResource("test.rtf");
    return new File(rtfURL);
  }
}

Wie du das RTF ins jar bekommst kommt auf deine Entwicklungsumgebung an, lässt sich aber ganz gut nachlesen.
 
Hi zeja,

ich bekomme leider immer "null" zurück.
Warum findet er mein rtf nicht? Wenn ich das gleiche mit jpegs mache, funktioniert es doch auch.
Die Verteilung bekomme ich jetzt hin, nur das Aufrufen funktioniert halt nicht. Ich glaube ich werde die rtf-Dateien alle in ein ZIP packen und das zum JAR hinzufügen. Womit ich dann immer noch das Problem habe, wie ich am besten an das ZIP rankomme.

jokerbell
 
Zuletzt bearbeitet:
Hallo,

hat noch jemand eine Idee ... ich komme leider immer noch nicht weiter.
Wenn ich das ganze mit Images mache, funktioniert es super, mit RTFs nicht.
Weiß jemand woran das liegt?

Bitte, bitte ... brauche dringend Hilfe.

jokerbell
 
Hallo,

es ist eigentlich fast das gleiche, aber hast du es mal mit

Code:
ClassLoader.getSystemResource()

versucht?

MFG

zEriX
 
Hi zeja, hi zEriX,

Im jar ist mein RTF drin, das habe ich schon kontrolliert, aber es funktioniert ja schon in meiner Entwicklungsumgebung nicht.
Ich habe jetzt folgenden Code:
Code:
package rtf;
import java.io.File;

public class LoadRTF
{
  public LoadRTF() {}
  
  public static String getRTF()
  {
    ClassLoader cl = LoadRTF.class.getClassLoader();
    File rtf = new File(cl.getResource("rtf/my_rtf.rtf").toString());
    System.out.println(rtf.getPath());
  }
}

Also so wie zeja empfohlen hatte, die Ausgabe ist aber immer "null", obwohl die Datei absolut sicher dort zu finden ist.
Das gleiche kommt auch raus wenn ich ClassLoader.getSystemResource() verwende.

Was mich nur wie gesagt wundert ist, ich rufe mit
Code:
final ImageIcon myIcon= new ImageIcon(ClassLoader.getSystemResource("image/my_image.jpg"));
Bilder ab und das funktioniert ... nur halt mit rtfs net :confused:

jokerbell
 
Im cl.getResource darf kein rtf/ vor dem RTF stehen, denn du befindest dich schon im Package RTF.
 
Wenn es mit dem was zeja jetzt meinte nicht funktioniert, dann versuch es mal mit ClassLoader.getSystemResource() und nicht mit RTFUtil.class.getResource().


MFG

zEriX
 
@zeja
auch so bekomme ich immer noch "null" zurück, d.h. wenn ich new File mache eine NullPointerException

@zEriX
auch mit diesem Aufruf bekomme ich nur "null" zurück ...

Ich zerbreche mir nun schon Tage und Nächte den Kopf, warum ich Bilder laden kann, aber meine RTFs nicht ...:confused:

Wie gesagt
das funktioniert :)
Code:
final ImageIcon myIcon= 
new ImageIcon(ClassLoader.getSystemResource("image/my_image.jpg"));
das nicht :mad:
Code:
final File myFile= 
new File(ClassLoader.getSystemResource("rtf/my_rtf.rtf"));

mfg
jokerbell
 
Zurück