2011-01-11 4 views
3

Ich bin verwirrt, wie auf die Excel-Datei in meinem Verzeichnis zugreifen. Ich verwende Netbean 6.9 + GlassFish v3 bundle.Java - wie auf Excel-Ressource zuzugreifen, ohne eine Klasse in demselben Verzeichnis zu haben?

project 
    | 
    |----web 
    |----src 
     |---local.test.jaxrs 
        | 
        |-----ExcellaTestResource 
        |-----myTemplate.xls 

Wie oben ich dachte, wenn die Excel-Datei im selben Verzeichnis wie Ressourcenklasse ist (das heißt ExcellaTestResource), kann ich erfolgreich die Excel-Datei erhalten.

URL templateFileUrl = ExcellaTestResource.class.getResource("myTemplate.xls"); 

Aber natürlich ist dies nicht gut, um Java-Klasse und Excel-Datei im selben Verzeichnis zu mischen.

Also zog ich die Excel-Datei zu project/web/myTemplate.xls

project 
     | 
     |----web 
     |  |-----------myTemplate.xls //new location 
     | 
     |----src 
      |---local.test.jaxrs 
         | 
         |-----ExcellaTestResource 
         | 

Jetzt kann ich die getResource() Methode nicht verwenden, da myTemplate.xls nicht im selben Verzeichnis wie die Klasse ExcellaTestResource Java ist :(

ich nur konnte bieten volle URL-Pfad zum m yTemplate.xls wie wenn .. nicht fiel direkt.

URL location = new URL("C://User/mmm/foo/bar/project/web/myTemplate.xls") 

Wie kann ich auf myTemplate.xls im neuen Verzeichnis (... web/myTemplate.xls) zugreifen?

Update

Ich habe versucht, File-Klasse verwenden, aber mein Test zeigt es nicht an das Verzeichnis meiner Absicht suchen ..

File myFile = new File("web/myTemplate.xls"); 

System.out.println(myFile.getAbsolutePath()); 

C: \ Benutzer \ m-takayashiki.netbeans \ 6.9 \ config \ GF3 \ domain1 \ web \ myTemplate.xls

Antwort

1

Wenn Sie es in Ihrem WEB-INF/classes setzen, können Sie getResourceAsStream() von Servlet-Kontext verwenden, um ein Inputstream zu erhalten.

Wenn Sie einen String von diesem InputStream an eine andere Klasse übergeben müssen, lesen Sie den Inhalt ein, erstellen Sie einen String und übergeben Sie ihn. Ich dachte, deine Frage bedeute, dass du den Inhalt einer Excel-Datei aus deinem Web-App-Kontext lesen musst.

Ist dies eine Web App oder nicht?

A file URL sieht wie folgt aus: "file: /// C: /User/mmm/foo/bar/project/web/myTemplate.xls"

Aber wenn Sie wollen, dass diese in einer Web-App zu tun Legen Sie die Excel-Datei in WEB-INF/classes ab und verwenden Sie den servlet-Kontext für getResourceAsStream() und lesen Sie den Inhalt mithilfe von InputStream. Dann verwandle diese Bytes in einen String.

+0

Ich habe vergessen, ein bisschen mehr Details über meine Situation hinzuzufügen..Ich werde hinzufügen. –

+0

Ich habe den Beitrag aktualisiert, ich kann nicht (ich denke) Stream verwenden, da ich String an den ReportBook-Konstruktor übergeben muss. –

+0

Ich dachte, ich verstehe, aber wie kann ich auf myTemplate.xls zugreifen, die im Web-Verzeichnis ist? (das war die ursprüngliche Frage, tut mir leid, dass ich nicht klar bin). Mein Hauptzweck ist es, auf diese Excel-Datei zuzugreifen.Nicht sicher, ob ich es streamen muss oder URL usw., irgendwie verwirrend in dieser Region –

1

Eine Möglichkeit ist project/web ist nicht in Ihrem CLASSPATH.

+0

hmm ich habe den Klassenpfad aber nein hinzugefügt Effekt –

+0

Nein, du hast nicht t. Du dachtest nur, dass du es getan hast. Sie verstehen nicht, wie CLASSPATH funktioniert. – duffymo

Verwandte Themen