7

「Debian Linux」用の Java アプリケーションを作成しました。ここで、そのアプリケーションが、そのアプリケーションの jar ファイルが指定されているディレクトリに配置されたファイルを読み取るようにします。では、ファイル オブジェクトの引数には何を指定すればよいのでしょうか。

File fileToBeReaded = new File(...);

アプリケーションのjarファイルが置かれているパスを表す相対ファイルパスを指定するには、上記のステートメントの引数に何を指定しますか?

4

6 に答える 6

8

もちろん、ファイルの名前がわかっている場合は、単に

new File("./myFileName")

名前がわからない場合は、File オブジェクトの list() メソッドを使用して、現在のディレクトリ内のファイルのリストを取得し、必要なファイルを選択できます。

于 2009-11-07T13:34:52.807 に答える
7

エスケープ文字の問題について質問していますか?

その場合は、バック スラッシュの代わりにスラッシュを使用します。

"C:/Users/You/Desktop/test.txt"

それ以外の

"C:\Users\You\Desktop\test.txt"

于 2012-07-04T03:53:27.890 に答える
5

での相対パスの使用java.io.Fileは、現在の作業ディレクトリに完全に依存しています。これは、JAR の実行方法によって異なります。たとえば/foo、にいて、JAR を実行したjava -jar /bar/jar/Bar.jar場合、作業ディレクトリはまだ/foo. しかし、実行cd/bar/jarて実行するとjava -jar Bar.jar、作業ディレクトリは/bar/jar.

JAR が配置されているルート パスが必要な場合は、次のいずれかの方法があります。

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

これは、JAR ファイルのルート パスを返します (つまり、クラスパス ルート)。リソースをクラスパス ルートに相対的に配置すると、次のようにアクセスできます。

File resource = new File(root, "filename.ext");

または、次を使用することもできます。

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
于 2009-11-07T13:40:06.303 に答える
3

これでうまくいくはずだと思います:

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

このようにして、ファイルはプロパティで検索されuser.dirます。これがアプリの作業ディレクトリになります。

于 2009-11-07T13:34:24.677 に答える
2

クラスローダに jar の場所を教えてもらうことができます。

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

...しかし、探しているファイルを jar ファイル内に配置し、リソース ( getClass().getResourceAsStream( "myFile.txt" )) として読み取ることをお勧めします。

于 2009-11-07T13:37:13.503 に答える