繁体   English   中英

Java-从目录中读取jar文件

[英]Java - read file from directory for jar

我有一个创建临时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.中的资源文件jar. 但是,如果我想从文件系统中的某个位置(例如C:\\something.mp3选择文件,这似乎不起作用C:\\something.mp3

有人可以帮我吗?

看来您没有临时文件的文件名。 当您在eclipse中运行程序时,该实例正在创建一个处理文件,但是在使该文件成为可运行文件之后,您将无法读取该实例在eclipse中创建的文件。您可以运行的文件可以创建自己的临时文件并可以对其进行处理,为了使临时文件Globe在某些数据库或属性文件中放置(path + name)项

例如,您将通过打击代码创建一个临时文件

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中进行编码无法找到这些临时文件

getClass().getResource()仅读取类路径上的资源。 实际上,传递给getResource()的路径是相对于当前类路径上任何路径的路径。 这听起来有点令人困惑,所以我举一个例子:

如果您的类路径包含目录C:\\development\\resources ,则可以使用getResource()在此目录下加载任何文件。 例如,有一个文件C:\\development\\resources\\mp3\\song.mp3 您可以通过调用来加载此文件

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM