質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

リソース

効果的な演算のために必要となる、メモリ・ディスク容量・CPUの性能や環境のこと。

Q&A

解決済

1回答

5659閲覧

java:エクセルファイルのパスの取得方法

takutomi

総合スコア7

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

リソース

効果的な演算のために必要となる、メモリ・ディスク容量・CPUの性能や環境のこと。

0グッド

0クリップ

投稿2019/12/23 15:49

編集2019/12/26 05:32

前提・実現したいこと

javafxにてアプリを作成しています
エクセルファイルのパスの取得方法を絶対パスから変更したいのですがうまくいかず困っています

発生している問題・エラーメッセージ

コメントアウトしているほうだと下記エラーが出ます
「java.io.FileNotFoundException: file:\C:\pleiades\workspace\test\bin\res\book.xlsx (ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。)」
パスの取得自体はうまくできているのですが,そのパスを使用するとエラーがでます

ダウンロードフォルダにあるほうのファイルを絶対パスで指定するとエラーはでないのですが

該当のソースコード

java

1package application; 2 3import java.io.FileInputStream; 4import java.net.URL; 5 6import org.apache.poi.xssf.usermodel.XSSFRow; 7import org.apache.poi.xssf.usermodel.XSSFSheet; 8import org.apache.poi.xssf.usermodel.XSSFWorkbook; 9 10import javafx.application.Application; 11import javafx.scene.Scene; 12import javafx.scene.layout.BorderPane; 13import javafx.scene.media.MediaPlayer; 14import javafx.stage.Stage; 15 16 17public class Main extends Application { 18 19 public MediaPlayer musicPlay; 20 21 22 @Override 23 public void start(Stage primaryStage) { 24 25 BorderPane root = new BorderPane(); 26 Scene scene = new Scene(root,850,100); 27 28 XSSFSheet sheetMain; 29 XSSFWorkbook workbook; 30 31 32 try { 33 34 XSSFRow row = null; 35 36 URL url = getClass().getClassLoader().getResource("res/book.xlsx"); 37 System.out.println(url.toString()); 38 39 40//こっちだとエラー workbook = new XSSFWorkbook(new FileInputStream(url.toString())); 41 42 URL url = getClass().getClassLoader().getResource("res/book.xlsx"); 43 44 }catch (Exception e) { 45 e.printStackTrace(); 46 System.out.println("処理が失敗しました"); 47 } 48 49 50 51 primaryStage.setScene(scene); 52 primaryStage.show(); 53 54 } 55 56 public static void main(String[] args) { 57 launch(args); 58 } 59 60}

画像

イメージ説明
プロジェクトの構成

補足情報(FW/ツールのバージョンなど)

環境
eclipse
java8
Apache POI(エクセルファイルを扱うライブラリ)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/25 13:33

https://teratail.com/questions/95513 に記載された問題と同根だと思います。 端的に言えば、rsrc:res/xxxx.xxxという特殊なURIになってしまい、普通のライブラリでは意味不明なのでリソースを取得できません。 このURIはeclipseで実行可能JARをexportした際、jarをjarに入れる形にすると使用され、同jar内にこのURIを扱える特殊なClassLoaderが同梱されます。 eclipseでjarをjarに入れない形でexportすれば動かすことは可能だと思います。 未確認ですが、jarをjarに入れる形にしたい場合は、fat-jarという形式にできれば動かせるのではないかと思います。 以上情報まで。
takutomi

2019/12/26 07:32

情報提供ありがとうございます そういう問題があったのですね 情報をもとに解決策を模索していきたいと思います ありがとうございました
guest

回答1

0

ベストアンサー

XSSFWorkbook(InputStream in)
XSSFWorkbookのコンストラクタにInputStreamを引数にとるものがあります。動作未確認。

Java

1XSSFWorkbook workbook = new XSSFWorkbook(url.openStream());

絶対パス
url.toString()の前についている"file:"を取る。Linuxはうまくゆきます。Windowsは"file:"か"file:/"かもしれません。とりあえずLinuxの例を書きます。

Java

1String fileName = url.toString().substring("file:".length()); 2XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileName));

POIの動作は確認せず。後で追記するかもしれません。

投稿2019/12/26 06:48

xebme

総合スコア1089

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takutomi

2019/12/26 08:27

回答ありがとうございます 教えていただいたコードを試したところエラーなく実行することができました 助かりました ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問