Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-从jar目录中读取文件_Java_File_File Io_Jar - Fatal编程技术网

Java-从jar目录中读取文件

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

我有一个应用程序,它可以创建一个临时mp3文件,并将其放入一个类似
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和文件系统加载,我必须使用两种不同的机制:

  • getClass().getClassLoader().getResource(path)
    ,如果返回null
  • 新文件(路径).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。