0

一時的なmp3ファイルを作成して次のようなディレクトリに配置するアプリケーションがありますC:\

File tempfile = File.createTempFile("something", ".mp3", new File("C:\\));

もう一度使うだけで読めますtempfile。EclipseIDEではすべてが正常に機能します。

しかし、プロジェクトをとしてエクスポートするRunnable jarと、ファイルはまだ正しく作成されています(iTunesなどの通常の音楽プレーヤーで再生できます)が、アプリケーションでそれらを読み取ることができなくなっているようです。

getClass().getResource("/relative/path/in/jar.mp3")にあるリソースファイルを使用するためのようなものを使用する必要があることがわかりましたがjar.、ファイルシステムの特定の場所からファイルを選択したい場合、これは機能しないようです。C:\something.mp3

誰かがこれについて私を助けてくれますか?

4

3 に答える 3

1

一時ファイルのファイル名がないようです。eclipseでプログラムを実行していたとき、そのインスタンスは処理ファイルを作成していましたが、実行可能ファイルを作成した後、eclipseで作成されたそのインスタンスのファイルを読み取ることができなくなりました。実行可能ファイルは、独自の一時ファイルを作成して処理できます。一時ファイルをグローブにするために、いくつかのデータベースまたはプロパティファイルに(パス+名前)エントリを配置します

たとえば、ブローコードから一時ファイルを作成します

File tempfile = File.createTempFile("out", ".txt", new File("D:\\"));           
FileWriter fstream = new FileWriter(tempfile);//write in file
out = new BufferedWriter(fstream);

outはout.txtファイルではありません。

out6654748541383250156.txt // it mean a randum number will be append with file

実行可能なjarでコーディングすると、これらの一時ファイルを見つけることができません

于 2012-12-04T18:46:51.797 に答える
0

getClass().getResource()クラスパスにあるリソースのみを読み取ります。に渡されるパスgetResource()は、実際には、現在のクラスパス上の任意のパスに対する相対パスです。これは少しややこしいので、例を示します。

クラスパスにディレクトリが含まれている場合はC:\development\resourcesgetResource(). たとえば、ファイルがあります C:\development\resources\mp3\song.mp3。を呼び出すことで、このファイルをロードできます。

getClass().getResource("mp3/song.mp3");

結論: を使用してファイルを読み取りたい場合getResource()は、それらのファイルをクラスパスに配置する必要があります。

于 2012-12-04T18:14:17.600 に答える
0

特権 JAR とファイル システムの両方からロードするには、2 つの異なるメカニズムを使用する必要がありました。

  • getClass().getClassLoader().getResource(path)、それが null を返す場合、
  • new File(path).toURI().toURL();

これを、クラスパス メソッドと 1 つ以上のファイル メソッド (おそらく異なるベース パスを使用) を使用する ResourceResolver 戦略に変えることができます。

于 2012-12-04T18:22:03.587 に答える