我有一个创建临时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
有人可以帮我这个吗?
答案 0 :(得分: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中的代码无法找到这些临时文件
答案 1 :(得分:0)
getClass().getResource()
仅读取类路径中的资源。实际上,传递给getResource()
的路径是相对于当前类路径上任何路径的路径。这听起来有点令人困惑,所以我举一个例子:
如果您的类路径包含目录C:\development\resources
,您将能够使用getResource()
加载此目录下的任何文件。例如,有一个文件C:\development\resources\mp3\song.mp3
。您可以通过调用
getClass().getResource("mp3/song.mp3");
底线:如果您想使用getResource()
读取文件,则需要将这些文件放在类路径中。
答案 2 :(得分:0)
要从特权JAR和文件系统加载,我必须使用两种不同的机制:
getClass().getClassLoader().getResource(path)
,如果返回null,new File(path).toURI().toURL();
您可以将此转换为使用classpath方法和一个或多个文件方法(可能使用不同的基本路径)的ResourceResolver策略。