Java 可以浏览jar中的文件夹吗?如果不可以,为什么?

Java 可以浏览jar中的文件夹吗?如果不可以,为什么?,java,javafx,jar,Java,Javafx,Jar,我不相信它为我的问题提供了所有的可能性1)xso说这不是一个好答案2)我想找到一个最简单的解决方案3)我没有回答我的问题为什么浏览jar中的文件必须与浏览文件系统中的文件不同4)这是一个旧线程,也许它在Java8、Java9或其他库中发生了变化 即使是新的链接也不能说服我。在目录中查找目录的问题在哪里解决?在这里,它只是jar中的文件。就我而言,我不知道(我也不想知道)动物的名单,颜色的名单 我正在为眼睛跟踪器开发游戏()。这些游戏是专门为残疾儿童设计的,他们的父母通常不习惯使用电脑。因此,我尝

我不相信它为我的问题提供了所有的可能性1)xso说这不是一个好答案2)我想找到一个最简单的解决方案3)我没有回答我的问题为什么浏览jar中的文件必须与浏览文件系统中的文件不同4)这是一个旧线程,也许它在Java8、Java9或其他库中发生了变化

即使是新的链接也不能说服我。在目录中查找目录的问题在哪里解决?在这里,它只是jar中的文件。就我而言,我不知道(我也不想知道)动物的名单,颜色的名单

我正在为眼睛跟踪器开发游戏()。这些游戏是专门为残疾儿童设计的,他们的父母通常不习惯使用电脑。因此,我尝试发布一个尽可能容易运行的软件

我已经用java/javafx实现了。我的软件必须作为jar下载并双击

在一个新的游戏中,这个想法是给孩子看一些图片,一个声音给出命令,他盯着正确的图片。例如,“大象在哪里?”?»孩子必须选择大象。颜色、卡通人物等也可以一样,我试着做一些尽可能通用的事情,因此对于动物,所有的都在«动物»目录中排序,每个动物都有一个目录(一个用于马,一个用于鹰,…),每个目录中都有几个图像。因此,添加新动物(只需添加目录)和添加新图片(将其添加到目录)都很容易。制作一个新游戏,建立一个新的目录层次结构(一个用于颜色,一个用于卡通人物,…)很容易。下面是我实际目录结构的摘录

它在我的IDE中工作得很好,但不幸的是它在我的jar中不工作。如果您知道图像的完整路径,则显示图像似乎很容易,但无法将函数用作File listFiles()。我试图找到解决办法,但似乎不起作用。有些人似乎说nio是可能的,但我没能让它工作

我有两个问题: 有可能吗?如果没有,为什么不可能?文件夹存在于我的jar中,它们不会消失,为什么没有办法列出它们的内容? 如果没有,如何尽可能轻松地实施解决方案


谢谢大家!

当您在IDE中运行代码时,它通常按原样使用文件和目录。当你将应用程序打包到一个JAR中时,它们被打包到一个文件中,这样你就得到了你描述的问题

这两种方法都是有效的,因为当你运行一个应用程序时,它使用一个所谓的类路径来查找内容,你可以将目录的位置和jar文件的位置都放在类路径中,Java自动支持这两种方法。通常,当它用于代码和已知资源时,它都是自动处理的,因此您不必处理它,但要发现东西,您必须自己编写一些代码


因此,如果您想发现哪些文件可用,您必须查看类路径,然后检查每个条目是否是目录或jar文件。对于扫描目录,您可以使用已经在使用的文件api,对于扫描JAR文件,您可能应该使用api。

您是否尝试过此文件File=new File(YOURCLASSNAME.class.getClassLoader().getResource(“data”).toURI().getPath());listFiles();由于jar文件的条目不在文件系统中,所以使用
文件
API是不可能的。(罐子本身当然是。)你会想到解决问题的两个方法:1。而不是存储图像。在jar中,将它们存储在运行应用程序的机器的文件系统中。这可能需要您提示用户存储图像的位置/将位置存储在方便的位置作为应用程序设置。2.添加索引文件作为资源。只需使用文本文件列出目录中的资源,并使用此信息查找图像。请不要进行无用的编辑。相反,如果你不认为你的问题是重复的。做一个建设性的编辑,解释为什么你认为它是重复的。我建议您阅读以了解如何进行良好的编辑并重新打开您的问题。“为什么浏览jar中的文件必须与浏览文件系统中的文件不同?”。同样,正如我之前所说的,而且像往常一样,您似乎完全忽略了它,acheron55的回答显示了如何使用
文件系统
API,以与文件系统相同的方式处理jar文件。但是,正如我之前解释的,它们完全不同。部署应用程序后,文件系统可以更改其内容。根据定义,jar文件不能。因此,对列出jar文件内容的API的需求要少得多:你在构建应用程序时就知道了内容。“>创建一个列出动物的索引文件,并将其包含在资源中?这不是我想做的,它不是通用的,也不容易管理。”如果你不想手工操作,可能有一种方法可以将其作为构建的一部分进行自动化,具体取决于您使用的构建工具。他需要使用类路径遍历数据目录中的每个文件,正如您使用getResource()所说的那样。好的,一加一