人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaで「アプリケーションの置いてあるフォルダのpluginsフォルダ内にあるファイルの一覧」を取得したいと思います。アプリケーションの置いてあるフォルダを取得する方法や、指定したフォルダの中身を取得する方法を教えてください。

●質問者: westfish
●カテゴリ:コンピュータ
✍キーワード:Java アプリケーション ファイル フォルダ
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● lains_you
●20ポイント

指定したフォルダの中身を取得する方法

java.io.FileクラスのlistFilesを使用します。フォルダのみや特定の拡張子を持つファイルのみをリストしたい場合は、抽出条件を記述したFileFilterのサブクラスを引数に与えて実行します。

http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/File.html


カレントディレクトリのファイル一覧を表示するサンプル。

File files[] = new File(".").listFiles();
for (int cnt = 0; cnt < files.length; cnt++) {
System.out.println(files[cnt].getAbsolutePath());
}

アプリケーションの置いてあるフォルダを取得する方法

単純に該当の実行ファイルをファイル検索し、そのFileインスタンスに対してgetParentFileメソッドを実行すると親フォルダが取得できます。

ただし、単純にファイル検索していくと処理が遅いので、LinuxなどではRuntime.execメソッドでwhichやfindコマンドを実行し、実行ファイルのパスを取得した方が速いです。


以下、単純に再帰しながら引数で与えられた名称のファイルを探すサンプル。

import java.io.File;
public class Find {
public static void main(String[] args) {
System.out.println("Start");
//特定のファイルを検索する
File file = find("test.txt");
if (file != null) {
System.out.println("ファイルパス:" + file.getAbsolutePath());
System.out.println("フォルダパス:" + file.getParent());
}
System.out.println("End");
}
//ルートフォルダから検索
public static File find(String find) {
File roots[] = File.listRoots();
File file;
for (int cnt = 0; cnt < roots.length; cnt++) {
if ((file = find(roots[cnt], find)) != null) {
return file;
}
}
return null;
}
//指定フォルダ以下から検索
public static File find(File parent, String find) {
File childs[];
File file;
childs = parent.listFiles();
if (childs == null || childs.length == 0) {
return null;
}
for (int cnt = 0; cnt < childs.length; cnt++) {
if (childs[cnt].isDirectory()) {
if ((file = find(childs[cnt], find)) != null) {
return file;
}
} else if (childs[cnt].isFile()) {
if (childs[cnt].getName().endsWith(find)) {
return childs[cnt];
}
}
}
return null;
}
}
◎質問者からの返答

アプリケーションの置いてあるフォルダを取得するにはファイル名で検索するしかないのでしょうか。ファイル名が書き換えられていたり、たまたま同じ名前のファイルがあったりすると困りますね…。

前半に関しては教えていただいた方法でうまく行きました。ありがとうございました


2 ● llusall
●10ポイント

[6375] Javaアプリのパスを取得

http://www.hellohiro.com/bbs/79.html

File app = new File(".");

String filePath = app.getAbsolutePath();



ファイル

listメソッド

この抽象パス名が示すディレクトリにあるファイルおよびディレクトリを示す文字列の配列を返します。

http://www.nextindex.net/java/IO/fileObj.html

例えば、このような感じで列挙できると思います。

File pluginsFile = new File("./plugins");

String[] fileList = pluginsFile.list();

◎質問者からの返答

その方法は時間がかからない分、一つめの回答よりはよさそうですが、取得しているのがあくまでカレントフォルダなので正しい値が返ってくるとは限らないのが問題点ですね。


3 ● lains_you
●5ポイント

アプリケーション実行ファイルのパスを取得する方法についてですが、DOSコマンドのSET、ASSOCとFTYPEを使用すれば、関連付けがされているアプリケーションのパスなら取得できるかもしれません。

SET 環境変数を表示、設定、または削除します。
 例)SET SystemRoot
 出力)SystemRoot=C:\WINDOWS
 
ASSOC ファイル拡張子の関連付けを表示または変更します。
 例)ASSOC .txt
 出力).txt=txtfile
 
FTYPE ファイル拡張子の関連付けで使われるファイルタイプを表示または変更します。
 例)FTYPE txtfiile
 出力)txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1

上記三つのコマンドを組み合わせれば、.txt拡張子に関連付けられているアプリケーションはC:\WINDOWS\system32\NOTEPAD.EXEであると取得できると思います。


以下、JavaからDOSのDIRコマンドを実行するサンプル。(Window XP)

try {
Process process = Runtime.getRuntime().exec("cmd.exe /c dir");
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
} catch (Exception e) {
e.printStackTrace();
}
◎質問者からの返答

すいません、そういうことではなくて、Javaで作成したソフトウェアが自分自身の置かれている絶対パスを知る方法について知りたいのです。


4 ● ma-kanoh
●5ポイント

http://jpf.sourceforge.net/

Java Plugin Framework

というJavaでプラグインを使わせるタイプのプラグラムを

作る場合のフレームワークがオープンソースになってます。

>JPF provides a runtime engine that dynamically discovers and loads "plug-ins". A plug-in is a structured component that describes itself to JPF using a "manifest". JPF maintains a registry of available plug-ins and the functions they provide

だから、自分で一から実装して細かいことに悩むよりはましかもしれません。

◎質問者からの返答

pluginsフォルダの位置の指定以外は実装済みなので今からversion0.10の他人が作ったフレームワークに乗り換えるのはリスクの割にリワードが少ないです。


5 ● kenichiice
●5ポイント

Java FAQによれば、自分自身の置かれている絶対パスを取得する汎用的な方法は無いようです。


Java Application で、クラスの .class ファイルの場所を得たいのですが?

http://javafaq.jp/S038.html#S038-01


プラグインを配置するならば、上のページに書かれているようにユーザのホームディレクトリ配下に配置するのがよいのではないかと思います。

◎質問者からの返答

むむむ、できないのですか。そうなるとカレントフォルダの取得で代用するのが次善の策かも知れませんね。

ホームディレクトリを使う方法はWindowsユーザーに優しくないので避けたいと思います。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ