0

我有一个应用程序,它创建一个临时 mp3 文件并将其放在一个目录中,如C:\

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

我可以通过tempfile再次使用它来阅读它。在 Eclipse IDE 中一切正常。

但是,当我将项目导出为 时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\resources,您将能够使用getResource(). 例如,有一个文件 C:\development\resources\mp3\song.mp3. 您可以通过调用加载此文件

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

底线:如果您想使用 读取文件getResource(),则需要将这些文件放在您的类路径中。

于 2012-12-04T18:14:17.600 回答
0

为了从特权 JAR 和文件系统加载,我不得不使用两种不同的机制:

  • getClass().getClassLoader().getResource(path), 如果返回 null,
  • new File(path).toURI().toURL();

您可以将其转换为使用类路径方法和一个或多个文件方法(可能使用不同的基本路径)的 ResourceResolver 策略。

于 2012-12-04T18:22:03.587 回答