2

ファイルの場所(ディレクトリ)をその場で設定するためにいくつかの関数を使用する方法はありますか?

このようにファイルの場所をハードコーディングするために使用するたびに

    String folder = "/Users/...../Desktop/sample";
    File dir = new File(folder);
    File[] files = dir.listFiles();

ハードコーディングを回避できる方法はありますか?私が使用している場所は、現在のディレクトリではありません。

この点に関する提案や助けをいただければ幸いです。:)

4

3 に答える 3

4

私が見ているように、いくつかのかなり単純な方法が実行可能ですが、正確にはあなたが望むものではないかもしれません:

クラスパスからナビゲートする

ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url = cl.getResource("relative/path/from/classpath");

また

String path = getClass().getClassLoader().getResource(".").getPath();

パスのエントリを含むプロパティファイルを使用する

Properties properties = new Properties();
properties.load(new FileInputStream("filename.properties"));
properties.getProperty("PATH")

プロパティファイルのどこに次のような行がありますか

PATH = the/absolute/path

環境変数を使用する

System.getenv("THE_PATH_ENV")

パスを環境変数に格納する場所(OSに該当する場合)。


パスをパラメータとして指定します 。これは非常に簡単です...メインの文字列配列にアクセスするだけです...

public static void main(String[] args){
    String path = args[0]; //Or at whatever position it is in your parameter list
    ..

あるいは、Javaファイルシステムコマンドを使用して、ディレクトリ構造を手動でトラバースし、その中の何かを検索することも可能だと思います。ただし、これは彼らの目的ではないため、これを行うことはお勧めしません。仮にそうだとしても、サードパーティのAPIに頼ると思います。

于 2012-10-04T11:29:15.377 に答える
0

Androidプロジェクトのフォルダの相対パスを取得するにはどうすればよいですか?

プロジェクト階層にフォルダーを配置し、プロジェクトへの相対パスを取得し、フォルダー名とファイル名を追加/ハードコードします。最後にファイル名または最後のフォルダ名のみをハードコーディングします。

于 2012-10-04T11:17:50.553 に答える
0

まず、パスが保存されているプロパティファイルを作成できます(これを1回実行して、後でプログラムでファイルを使用できます)。

/* Create/save properties once */

Properties prop = new Properties();

prop.setProperty("filePath", "/myPath/");

FileOutputStream fos = new FileOutputStream("sampleprops.xml");
prop.storeToXML(fos, "File configuration");
fos.close();

次に、コード内の必要な場所にプロパティをロードできます。

Properties prop = new Properties();
FileInputStream fis = new FileInputStream("sampleprops.xml");
prop.loadFromXML(fis);

File dir = new File(prop.getProperty("filePath"));
File[] files = dir.listFiles();

sampleprops.xmlファイル(アプリケーションのクラスパスにある必要があります)にアクセスできることを確認する必要があります。このようにして、外部構成ファイルから使用するパスを構成できます。

于 2012-10-04T11:36:28.947 に答える