Java 将文件夹中的所有文件保存到jar中

Java 将文件夹中的所有文件保存到jar中,java,file,jar,resources,directory,Java,File,Jar,Resources,Directory,第一: 我知道,这个问题已经被问了100次了。 我知道,有人可能已经给出了正确的答案 但无论如何,我必须再问一次。我没有找到适合我的解决方案。对不起 我正在用java编写一个游戏。当然,我有很多带有声音和图片等的软件包(文件夹)。但这些文件夹的大小各不相同。所以我想把这样一个文件夹的内容动态地保存在一个列表中 通常,我是这样做的: File f[] = new File(getClass.getResource("/home/res/").toURI()).listFiles(); 现在我可以

第一:

我知道,这个问题已经被问了100次了。 我知道,有人可能已经给出了正确的答案

但无论如何,我必须再问一次。我没有找到适合我的解决方案。对不起

我正在用java编写一个游戏。当然,我有很多带有声音和图片等的软件包(文件夹)。但这些文件夹的大小各不相同。所以我想把这样一个文件夹的内容动态地保存在一个列表中

通常,我是这样做的:

File f[] = new File(getClass.getResource("/home/res/").toURI()).listFiles();
现在我可以迭代这个文件对象并保存每个文件。完美的真的吗

不。当我将这个项目提取到jar归档文件中时,它失败了。这一切都是因为uri不是“分层”或类似的东西。请参见此例外:

C:\Users\Administrator\Desktop>java -jar Homework.jar
java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(Unknown Source)
        at homework.moonface.src.Moonface.loadSounds(Moonface.java:94)
        at homework.moonface.src.Moonface.<init>(Moonface.java:55)
        at control.Overview.main(Overview.java:16)
C:\Users\Administrator\Desktop>java-jar作业.jar
java.lang.IllegalArgumentException:URI不是分层的
位于java.io.File。(未知源)
在家庭作业.moonface.src.moonface.loadSounds(moonface.java:94)中
moonface.src.moonface.(moonface.java:55)
位于control.Overview.main(Overview.java:16)
好的,我想,所以我需要得到这个路径并将它手动添加到文件对象中。(新文件(“路径”);但是……这不起作用。我得到了一个已知的错误,输入没有正确写入,或者当我试图从资源url中剪切“File:”时,它会断开,因为在一个jar中它是“jar:File:”而不是“File:”。但是如果我剪切了jar:File:我会得到null

因此,请不要将此标记为重复,请尝试简短地为我解释一下。这将有助于成千上万不了解其他解决方案但又不是解决方案的其他人。

尝试以下方法:

    URL jarResourceURL = getClass().getResource("/home/res/");
    JarURLConnection jarURLConnection = (JarURLConnection) jarResourceURL.openConnection();
    Enumeration<JarEntry> entries = jarURLConnection.getJarFile().entries();
    while (entries.hasMoreElements()){
        entries.nextElement(); // iterate over entries and do something
    }
URL jarResourceURL=getClass().getResource(“/home/res/”);
JarURLConnection JarURLConnection=(JarURLConnection)jarResourceURL.openConnection();
枚举条目=jarURLConnection.getJarFile().entries();
while(entries.hasMoreElements()){
entries.nextElement();//迭代条目并执行某些操作
}
UPD:我在想spring框架的
ClassPathXmlApplicationContext
如何解析JAR中的资源。所以我研究了源代码,发现有一个实用类
org.springframework.core.io.ClassPathResource
,它有一个方便的接口(此外,还可以使用它获取相应的
java.io.File
实例)并帮助您解决问题。以下是文档: 试试这个:

    URL jarResourceURL = getClass().getResource("/home/res/");
    JarURLConnection jarURLConnection = (JarURLConnection) jarResourceURL.openConnection();
    Enumeration<JarEntry> entries = jarURLConnection.getJarFile().entries();
    while (entries.hasMoreElements()){
        entries.nextElement(); // iterate over entries and do something
    }
URL jarResourceURL=getClass().getResource(“/home/res/”);
JarURLConnection JarURLConnection=(JarURLConnection)jarResourceURL.openConnection();
枚举条目=jarURLConnection.getJarFile().entries();
while(entries.hasMoreElements()){
entries.nextElement();//迭代条目并执行某些操作
}
UPD:我在想spring框架的
ClassPathXmlApplicationContext
如何解析JAR中的资源。所以我研究了源代码,发现有一个实用类
org.springframework.core.io.ClassPathResource
,它有一个方便的接口(此外,还可以使用它获取相应的
java.io.File
实例)并帮助您解决问题。以下是文档:

不要乞求怜悯,也不要吮吸。如果你问了一个适当的问题,并给出了适当的细节(好像你有),有人会帮你的。只是要明确一点:你有一个罐子,里面有一堆你想写入文件系统的文件?是时候学习
Ant
。使用Ant scrip,你可以管理你所有的文件了resources@SotiriosDelimanolis我的洞项目在罐子里。(双击文件)主要课程,其他课程和资源。我不吃奶,我只是想因为这个问题请求原谅,这个问题已经被问过了…不要乞求怜悯,也不要吃奶。如果你问了一个适当的问题,并有适当的细节(好像你已经问过了),有人会帮你的。只是要明确一点:你有一个罐子,里面有一堆你想写入文件系统的文件?是时候学习
Ant
。使用Ant scrip,你可以管理你所有的文件了resources@SotiriosDelimanolis我的洞项目在罐子里。(双击文件)主类、其他类和资源。我不喜欢,我只是想请求原谅,因为这个问题已经被问到了…得到这个异常:
java.lang.ClassCastException:sun.net.www.protocol.file.FileURLConnection不能转换为java.net.JarURLConnection在家庭作业.moonface.src.moonface.loadSounds中的java.net.JarURLConnection(Moonface.java:93)在homoom.Moonface.src.Moonface.(Moonface.java:55)在control.Overview.main(Overview.java:16)
您是否尝试使用不在jar中的类路径成员?没有,但资源必须在jar中..或者您的意思是什么?获取此异常:
java.lang.ClassCastException:sun.net.www.protocol.file.FileURLConnection无法强制转换为java.net.JarURLConnection,位于家庭作业.moonface.src.moonface.loadSounds(Moonface.java:93)在家庭作业.Moonface.src.Moonface.(Moonface.java:55)在control.Overview.main(Overview.java:16)
您是否尝试使用不在jar中的类路径成员?不是,但资源必须在jar中..或者您的意思是什么?