Java-从jar目录中读取文件
我有一个应用程序,它可以创建一个临时mp3文件,并将其放入一个类似Java-从jar目录中读取文件,java,file,file-io,jar,Java,File,File Io,Jar,我有一个应用程序,它可以创建一个临时mp3文件,并将其放入一个类似C:\ File tempfile = File.createTempFile("something", ".mp3", new File("C:\\)); 我可以通过再次使用相同的tempfile来读取它。 在EclipseIDE中一切都很好 但是当我将我的项目导出为一个可运行jar时,我的文件仍然制作正确(我可以用一些普通的音乐播放器(如iTunes)播放它们),但我似乎无法在我的应用程序中读取它们 我发现我需要使用getC
C:\
File tempfile = File.createTempFile("something", ".mp3", new File("C:\\));
我可以通过再次使用相同的tempfile
来读取它。
在EclipseIDE中一切都很好
但是当我将我的项目导出为一个可运行jar
时,我的文件仍然制作正确(我可以用一些普通的音乐播放器(如iTunes)播放它们),但我似乎无法在我的应用程序中读取它们
我发现我需要使用getClass().getResource(“/relative/path/in/jar.mp3”)
之类的东西来使用jar中的资源文件。
但是如果我想从文件系统中的某个位置选择文件,比如C:\something.mp3
有人能帮我吗?getClass()。getResource()
只读取类路径上的资源。传递给getResource()
的路径实际上是相对于当前类路径上任何路径的路径。这听起来有点混乱,因此我将举一个例子:
如果类路径包含目录C:\development\resources
,则可以使用getResource()
加载此目录下的任何文件。例如,有一个文件C:\development\resources\mp3\song.mp3
。您可以通过调用
getClass().getResource("mp3/song.mp3");
一句话:如果您想使用
getResource()
读取文件,您需要将这些文件放在类路径上。要从特权JAR和文件系统加载,我必须使用两种不同的机制:
,如果返回nullgetClass().getClassLoader().getResource(path)
新文件(路径).toURI().toul()代码>
您可以将其转换为ResourceResolver策略,使用类路径方法和一个或多个文件方法(可能使用不同的基本路径)。似乎您没有临时文件的文件名。当您在eclipse中运行程序时,该实例正在创建一个正在处理的文件,但在您创建了一个可运行文件之后,您无法读取该实例在eclipse中创建的那些文件,您的可运行文件可以创建自己的临时文件并处理它们, 要创建临时文件,请在某些数据库或属性文件中放置(路径+名称)项 例如,您将根据blow代码创建一个临时文件
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
您在runnable jar中编写的代码无法找到这些临时文件ok,那么我是否应该将我的runnable jar放在c:\development中(在本例中)?在不确切了解您试图使用此应用程序实现什么的情况下,我无法提出任何建议。我只是指出你的例子不起作用的原因。您应该将应用程序文件保存在jar中,无论是否可运行,并且您应该能够在文件系统的任何位置播放MP3。