- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
第一:
我知道,这个问题已经被问了大约 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)
好吧,我想,所以我需要获取这个路径并将其手动添加到文件对象中。 (new File("path"); 但是...这不起作用。我收到一个已知错误,即输入写入不正确,或者当我尝试从资源 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
}
UPD:我正在考虑spring框架的ClassPathXmlApplicationContext
如何解析jar中的资源。于是我研究了源码,发现有一个实用类org.springframework.core.io.ClassPathResource
,它有一个方便的接口(interface)(而且可以使用它获取相应的java.io.File
实例),可以帮助你解决问题。这是文档: http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/core/io/ClassPathResource.html
关于java - 将文件夹中的所有文件保存在 jar 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125978/
我是一名优秀的程序员,十分优秀!